我正在使用ADO.Net DataServices向Silverlight公开实体数据模型。该模型具有返回void的存储过程。我想从Silverlight客户端调用此过程。
我的理解是我应该向DataService类添加一个[WebInvoke]方法,并使用DbCommand来调用存储过程。
到目前为止,这是我的代码:
using System.Data.Common;
using System.Data.Services;
using System.ServiceModel.Web;
namespace Foo.Web
{
public class PayrollDataService : DataService<Foo.Web.PayrollEntities>
{
public static void InitializeService(IDataServiceConfiguration config)
{
config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
config.UseVerboseErrors = true;
}
[WebInvoke]
public void RunMyProcedure()
{
DbConnection conn = this.CurrentDataSource.Connection;
DbCommand cmd = conn.CreateCommand();
// TODO: Call the stored procedure in the EF Data Model.
}
}
}
有人可以确认这是正确的方法并在这种情况下使用DbCommand显示示例吗?
答案 0 :(得分:1)
我遇到的问题是为什么你在实体框架中运行它,因为你什么也没有返回,这告诉我你实际上并没有填充对象。如果这只是一些清理并且不会影响数据,我就不会在EF中使用它。
如果这是您的问题,使用DBCommand解雇查询没有任何问题。如果你实际上影响了EF对象,我不会那么担心在那里存储过程。如果程序不影响EF对象,我会将它与EF分开,而不是将所有内容都看作钉子,将EF看作锤子。
答案 1 :(得分:0)
您必须在edmx模型导入存储过程,导入函数,它将返回None,并从您的代码中调用它。就像这样:
[WebInvoke][WebGet]
public void RunMyProcedure(int Param1, string Param2)
{
this.CurrentDataSource.ImportedFunction(Param1,Param2);
}
然后你可以从浏览器中调用它:http://urltoservice/serviceName.svc/RunMyProcedure?Param1 = 666&amp; Param2 = thetringvalue'