2012-01-13 10 views
1

私は、クエリー結果をjavascriptクライアントに返すためにWCF dataserviceクラスを作成しました。私のデータサービスの疑似コードは次のとおりです。wcf dataserviceから関連するエンティティを返す方法

public class MyDataService : DataService<MyEntities> 
{ 
    public static void InitializeService(DataServiceConfiguration config) 
    { 
     config.SetEntitySetAccessRule("*", EntitySetRights.All); 
     config.SetServiceOperationAccessRule("MyGetMethod", ServiceOperationRights.All); 
     config.DataServiceBehavior.MaxProtocolVersion = DataServicePRotocolVersion.V2; 
    } 

    [WebGet(UriTemplate = "{SomeID}"] 
    public IEnumerable<Models.Customer> MyGetMethod(int? someID) 
    { 
     if (someID == null) throw new DataServiceException("ID not specified"); 

     MyEntities context = this.CurrentDataSource; 
     context.ContextOptions.LazyLoadingEnabled = false; 

     var q = Linq statement which queries for a collection of entities from context 

     IEnumerable<Models.Customer> result = q; 
     foreach (Models.Customer customer in result) 
     { 
      if (!customer.Contacts.IsLoaded) 
       customer.Contacts.Load(); 
     } 

     return result; 
    } 
} 

クライアント要求からの呼び出しがjsonになります。 dataserviceでgetメソッドをデバッグすると、resultにはWrappedRelatedEntitiesというプロパティで展開された特定の関連データがありますが、jsonでクライアントに返された関連エンティティは遅延しています。

これらの関連エンティティをクライアントに返品させるには、どうすればよいですか?ありがとう!

答えて

1

WCF DSサービスでは、サーバーがナビゲーションプロパティを強制的に展開する方法はありません。クライアントが要求した場合にのみ機能します。したがって、IQueryableを返すようにサービス操作を変更し、クライアントは$ expand = NameOfThePropertyToExpandをURLに追加する必要があります。

関連する問題