2009-02-25 2 views
0

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

Мое понимание заключается в том, что я должен добавить метод [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 в этой ситуации?

ответ

1

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

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

+0

Это имеет смысл. Я начал с модели EF и DataServices, потому что я думал, что хранимые процедуры полностью поддерживаются. Оказывается, они поддерживаются только при возврате типа Entity. Смотрите: http://stackoverflow.com/questions/578536/function-imports-in-entity-model-with-a-non-entity-return-type –

+0

Я возвращаю типы сущностей в большинстве случаев, но это одно исключение. Должен ли я отделить этот метод от всех остальных? –

+0

Я не вижу ничего плохого в том, чтобы отделить этот метод, поскольку он фактически не использует EF. Вы просто добавляете sproc туда, чтобы у вас был один метод доступа к данным. Есть аргументы в обоих направлениях. Pro = одинаковая модель; CON = седло, в отличие от методов для одного и того же рисунка. –

0

Вы должны импортировать свою процедуру хранения в вашей модели 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'