WCF数据服务暴露EF4模型的自定义部分方法的问题

时间:2011-08-31 21:52:14

标签: entity-framework-4 wcf-data-services

我正在探索使用WCF数据服务和EF4实现Web服务api的想法。意识到某些操作需要复杂的业务逻辑,我决定创建一个与主EF数据上下文部分类同名的部分类,并在那里实现其他方法来处理更复杂的业务逻辑。当直接使用EF上下文对象时,附加方法显示(通过intellisense)并正常工作。当通过WCF数据服务公开EF类并在另一个项目中创建和使用服务引用时,新方法不会显示在intellisense或生成的Service.cs文件中(当然,我更新了引用甚至是删除它并重新添加它)。原生数据方法(即context.AddObject()和context.AddToPeople())可以正常工作,但新方法甚至无法使用。

我的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.任何想法为什么Web服务没有看到添加的部分类,但直接使用EF对象时,方法是否存在并且正常工作? 2.使用具有其他方法的分部类是否能够很好地解决使用EF生成的模型处理复杂业务规则的问题?

我喜欢让oData框架为公开的数据对象提供查询机制的想法,以及您可以拥有一个具有SOAP的一些优点的宁静Web服务这一事实。

1 个答案:

答案 0 :(得分:2)

只有在派生自DataService的类中存在服务操作时,才会识别它们。 WCF数据服务不会查看这些上下文类。另请注意,默认情况下不公开方法,您需要使用WebGet或WebInvoke属性,并允许在InitializeService实现中访问它们。 http://msdn.microsoft.com/en-us/library/cc668788.aspx