2011-08-31 28 views
0

我在探討使用WCF數據服務和EF4實現Web服務API的想法。由於意識到某些操作需要複雜的業務邏輯,我決定創建一個與主要EF數據上下文部分類同名的部分類,並實現其中的附加方法來處理更復雜的業務邏輯。當直接使用EF上下文對象時,附加方法顯示(通過智能感知)並正常工作。當通過WCF數據服務公開EF類並在另一個項目中創建並使用服務引用時,新方法不會顯示在智能感知或生成的Service.cs文件中(當然,我更新了引用,甚至刪除它並重新添加它)。本地數據方法(即context.AddObject()和context.AddToPeople())可以正常工作,但新方法甚至不可用。WCF數據服務暴露EF4模型的自定義部分方法的問題

我的EF類是這個樣子:

namespace PeopleModel 
{ 
    //EF generated class 
    public partial class PeopleEntities : ObjectContext 
    { 
     //Constructors here 

     //Partial Methods here 

     //etc.... 
    } 

    //Entity classes here 

    //My added partial class 
    public partial class PeopleEntities 
    { 
     public void AddPerson(Person person) 
     { 
      base.AddObject("People", person); 
     }  
    } 
} 

沒有什麼特別之處.svc文件。包含自動生成的代理類的Reference.cs文件沒有新的「AddPerson()」方法。

我的問題是: 1.任何想法爲什麼網絡服務沒有看到添加的部分類,但直接使用EF對象的方法是否存在並正常工作? 2.是否使用帶有其他方法的分部類可以很好地解決使用EF生成的模型處理複雜業務規則的問題?

我喜歡讓oData框架在公開的數據對象上提供查詢機制的想法,以及您可以擁有一個具有SOAP的一些好處的平穩Web服務的事實。

回答

2

僅當服務操作出現在派生自DataService的類上時纔會被識別。 WCF數據服務不會查看這些上下文類。還要注意,默認情況下方法不公開,您需要使用WebGet或WebInvoke對它們進行屬性,並允許在InitializeService實現中訪問它們。 http://msdn.microsoft.com/en-us/library/cc668788.aspx

+0

感謝您的回覆。我在MSDN Data Developer網站的數據服務部分詢問了同樣的問題:http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataservices/threads。我到那裏的答案與你的答案類似(更詳細一點)。對於閱讀此主題的其他人,以下是有關服務操作的一些有趣信息:http://blogs.msdn.com/b/writingdata_services/archive/2011/03/28/calling-service-operations-from-the-client.aspx –