我在探討使用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服務的事實。
感謝您的回覆。我在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 –