2011-08-31 24 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 –