1
私は同様の質問をしましたが、解決策はまだ見つかりませんでした。私はWCFを使用したエンティティフレームワークのナビゲーションプロパティがポピュレートされない
.Include("")
.Load()
を使用してみましたが、私は私のWCFサービスを介してそれらを取得するときに私のナビゲーションプロパティは空のままです。ここで
は私の実体である:
public class Person
{
public int PersonID { get; set; }
public string Name { get; set; }
public virtual ICollection<Address> Addresses { get; set; }
public Person()
{
this.Addresses = new List<Address>();
}
}
public class Address
{
public int AddressID { get; set; }
public string AddressLine1 { get; set; }
public virtual ICollection<Person> Residents { get; set; }
public Address()
{
this.Residents = new List<Person>();
}
}
私はそれぞれのアドレス/住民の両方のエンティティのhasManyをすることを宣言しています流暢なAPIを使用します。私のWCFサービスコードは次のようになります。
[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
public class Repository : DataService<EFEntitiesDataContext>
{
// This method is called only once to initialize service-wide policies.
public static void InitializeService(DataServiceConfiguration config)
{
config.UseVerboseErrors = true;
config.SetEntitySetAccessRule("*", EntitySetRights.All);
config.SetServiceOperationAccessRule("*", ServiceOperationRights.All);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
}
protected override EFEntitiesDataContext CreateDataSource()
{
EFEntitiesDataContext dataSource = new EFEntitiesDataContext();
dataSource.Configuration.ProxyCreationEnabled = false;
dataSource.Configuration.LazyLoadingEnabled = true;
return dataSource;
}
[WebGet]
public IList<Person> GetAllPeople()
{
EFEntitiesDataContext context = this.CreateDataSource();
return context.People.Include("Addresses").Where(n => n.Addresses.Any()).ToList();
}
}
そして最後に、私はこのように私のサービスを呼び出しています:
static void Main(string[] args)
{
Uri uri = new Uri("http://localhost:49479/Repository.svc");
RepositoryService.EFEntitiesDataContext repositoryService = new RepositoryService.EFEntitiesDataContext(uri);
Uri uriRequest = new Uri(string.Concat(repositoryService.BaseUri, "/GetAllPeople"));
foreach (var person in repositoryService.Execute<RepositoryService.Person>(uriRequest))
{
System.Console.WriteLine("Name: " + person.Name + ", Addresses: " + person.Addresses.Count.ToString());
}
System.Console.ReadKey();
}
任意のアイデア誰ですか?
サーバ側( 'GetAllPeople()')またはクライアント( 'Main'内)のみにアドレスが既にありますか?ところで、私は 'ProxyCreationEnabled = false'と' LazyLoadingEnabled = true'を設定することは理にかなっていません。なぜなら、遅延ロードはプロキシなしでは動作できないからです。しかし、あなたが 'Include'を使って熱心な読み込みをしているので、あなたの問題とは何の関係もないでしょう。 – Slauma