c#WCF数据服务+实体框架自定义存储过程

时间:2013-10-01 13:40:08

标签: c# entity-framework entity-framework-5 wcf-data-services

我有一个使用WCF DataServices和EntityFramework的c#应用程序。

似乎一切正常,但现在我需要使用存储过程实现自定义插入。

我试图在网上找到任何帮助,但似乎什么都没有。

我有我的数据服务:

[MessageInspectorBehavior]
    public class Security : DataService<VisitAwareContext>
    {
        // This method is called only once to initialize service-wide policies.
        public static void InitializeService(DataServiceConfiguration config)
        {
            // TODO: set rules to indicate which entity sets and service operations are visible, updatable, etc.
            // Examples:
            config.SetEntitySetAccessRule("SecurityUsers", EntitySetRights.All);
            config.SetEntitySetAccessRule("Sessions", EntitySetRights.All);
            // config.SetServiceOperationAccessRule("MyServiceOperation", ServiceOperationRights.All);
            config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;
            // Other configuration here...
            config.UseVerboseErrors = true; // TODO - Remove for production?
        }

[WebGet]
        public bool CustomInsert(string customField1, string customField2)
        {
            // here I need to call my stored procedure and pass the fields....

            return true;
        }
}

有没有办法做到这一点?或者有人可以推荐我一个解决方案?

我知道您不能只使用一种服务器 - 客户端数据技术,例如WCF DataServices,我可以为这些场景添加备用WCF ADO.NET方法,但我想暂时使用EF + WCF数据服务。

非常感谢。

2 个答案:

答案 0 :(得分:1)

OData actions与WCF数据服务“Service Operations”一起使用。如MSDN文章中所述,您可以对数据服务类中的方法使用WCF WebInvoke属性(尊重属性给出的约束)。

在方法中,您可以使用数据服务的CurrentDataSource属性(从其基类DataService类继承)来检索实体框架DbContext

从那里,您可以在how to call a stored procedure with the Entity Framework上搜索Stack Overflow(或更好;当然,请阅读精细手册)。

答案 1 :(得分:0)

使用[WebInvoke]而不是[WebGet]属性。这样你就可以使用POST而不是客户端的GET来调用服务操作。除此之外,你所拥有的似乎是正确的。

由于 PRATIK