2010-05-24 3 views
1

L'une de mes entités possède une propriété EntitySet <> avec les attributs [Composition], [Inclure] et [Association]. Je peuple cette collection dans mon service de domaine mais quand je vérifie son contenu quand il est reçu sur le client, la collection est vide. J'utilise Silverlight 4 RTM ainsi que RTM RIA Services 1.0.La collection est vide lorsqu'elle arrive sur le client

Des idées de ce que je fais mal?

Voici le code de mon côté service:

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; 
    } 
} 

Répondre

0

Ok. Le problème était que le service mon domaine ne définissait pas la propriété RegionID des classes CityDto lorsqu'il les instanciait. Donc, même si c'était mettre les villes dans la collection de RegionDto, RIA Services sur le client ne pouvait pas reconstituer l'assocation ensemble. Modification de mon service de domaine à cela a résolu le problème

[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; 
    } 
}