我有一个使用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数据服务。
非常感谢。
答案 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