【问题标题】:Problem with WCF Data service exposing custom partial methods of EF4 modelWCF 数据服务暴露 EF4 模型的自定义部分方法的问题
【发布时间】:2011-08-31 21:52:14
【问题描述】:

我正在探索使用 WCF 数据服务和 EF4 实现 Web 服务 api 的想法。意识到某些操作需要复杂的业务逻辑,我决定创建一个与主 EF 数据上下文分部类同名的分部类,并在那里实现其他方法来处理更复杂的业务逻辑。当直接使用 EF 上下文对象时,附加方法会显示(通过智能感知)并正常工作。当通过 WCF 数据服务公开 EF 类并在另一个项目中创建和使用服务引用时,新方法不会出现在智能感知或生成的 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 服务这一事实。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    相关资源
    最近更新 更多