从ADO.Net DataService中的Entity Framework中执行存储过程

时间:2009-02-25 18:13:33

标签: .net entity-framework .net-3.5 ado.net

我正在使用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显示示例吗?

2 个答案:

答案 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'