Коллекция пуста, когда она прибывает на клиента - PullRequest
1 голос
/ 24 мая 2010

Одна из моих сущностей имеет свойство 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;
  }
}

1 Ответ

0 голосов
/ 24 мая 2010

Хорошо.Проблема заключалась в том, что служба моего домена не устанавливала свойство 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;
  }
}
...