Выполнить хранимую процедуру в Entity Framework из ADO.Net DataService - PullRequest
0 голосов
/ 25 февраля 2009

Я использую ADO.Net DataServices для предоставления модели данных сущностей Silverlight. Модель имеет хранимую процедуру, которая возвращает void. Я хочу вызвать эту процедуру из клиента Silverlight.

Насколько я понимаю, я должен добавить метод [WebInvoke] в класс DataService и использовать 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 ]

1 голос
/ 25 февраля 2009

У меня есть вопрос, почему вы запускаете это в Entity Framework, так как вы ничего не возвращаете, что подсказывает мне, что вы на самом деле не заполняете объекты. Если это всего лишь некоторая очистка и не влияет на данные, я бы не использовал их в EF.

Нет ничего плохого в использовании DBCommand для запуска запросов, если это ваш вопрос. И если вы на самом деле воздействуете на объекты EF, я бы не стал беспокоиться о сохранении там процедуры. Если процедура не влияет на объекты EF, я бы выделил ее отдельно от EF, а не рассматривал бы все как гвоздь, а EF как молоток.

0 голосов
/ 20 февраля 2013

Вы должны импортировать вашу процедуру хранения в вашу модель edmx, функцию импорта, которая вернет None, и вызвать ее из вашего кода. Просто так:

[WebInvoke][WebGet]
public void RunMyProcedure(int Param1, string Param2)
{
    this.CurrentDataSource.ImportedFunction(Param1,Param2);
}

Затем вы можете вызвать его из браузера: http: //urltoservice/serviceName.svc/RunMyProcedure?Param1=666&Param2='stringvalue'

...