Коллекция пуста, когда приходит к клиенту

Одна из моих сущностей имеет свойство EntitySet ‹> с атрибутами [Composition], [Include] и [Association]. Я заполняю эту коллекцию в своей доменной службе, но когда я проверяю ее содержимое, когда оно получено на клиенте, коллекция пуста.

Я использую Silverlight 4 RTM, а также RIA Services 1.0 RTM.

Есть идеи, что я делаю неправильно?

Вот код на моей сервисной стороне:

public class RegionDto
{
  public RegionDto()
  {
      Cities = new EntitySet<CityDto>();
  }

  [Key]
  public int Id { get; set; }
  public string Name { get; set; }

  [Include]
  [Composition]
  [Association("RegionDto_CityDto", "Id", "RegionId")]
  public EntitySet<CityDto> Cities { get; set; }
}

public class CityDto
{
  [Key]
  public int Id { get; set; }
  public int RegionId { get; set; }
  public string Name { get; set; }
}

[EnableClientAccess()]
public class RegionDomainService : LinqToEntitiesDomainService<RegionEntities>
{
  public IEnumerable<RegionDto> GetRegions()
  {
      var regions = (ObjectContext.Regions
          .Select(x => new RegionDto
          {
              Id = x.ID,
              Name = x.Name
          })).ToList();

      foreach (var region in regions)
      {
          var cities = (ObjectContext.Cities
              .Where(x => x.RegionID == region.Id)
              .Select(x => new CityDto
              {
                  Id = x.ID,
                  Name = x.Name
              })).ToList();

          foreach (var city in cities)
          {
              region.Cities.Add(city);
          }
      }

      //  each region's Cities collection is populated at this point
      //  however when the client receives it, the Cities collections are all empty
      return regions;
  }
}

person joshuapoehls    schedule 24.05.2010    source источник


Ответы (1)


В порядке. Проблема заключалась в том, что служба моего домена не задавала свойство RegionID классов CityDto при их создании. Таким образом, даже несмотря на то, что города помещались в коллекцию RegionDto, служба RIA Services на клиенте не могла собрать ассоциацию воедино.

Смена службы моего домена на это устранила проблему.

[EnableClientAccess()]
public class RegionDomainService : LinqToEntitiesDomainService<RegionEntities>
{
  public IEnumerable<RegionDto> GetRegions()
  {
      var regions = (ObjectContext.Regions
          .Select(x => new RegionDto
          {
              Id = x.ID,
              Name = x.Name
          })).ToList();

      foreach (var region in regions)
      {
          var cities = (ObjectContext.Cities
              .Where(x => x.RegionID == region.Id)
              .Select(x => new CityDto
              {
                  Id = x.ID,
                  Name = x.Name,
                  RegionId = region.Id
              })).ToList();

          foreach (var city in cities)
          {
              region.Cities.Add(city);
          }
      }

      //  each region's Cities collection is populated at this point
      //  however when the client receives it, the Cities collections are all empty
      return regions;
  }
}
person joshuapoehls    schedule 24.05.2010