использование хранимых процедур в качестве функций из файла edmx - PullRequest
0 голосов
/ 25 февраля 2010

У меня есть файл файла модели объекта (edmx), который содержит несколько таблиц и несколько хранимых процедур.

как я могу вызвать те хранимые процедуры, которые сопоставлены с функциями? я подумал, что это должно быть тривиально, и я вижу отображение в файле edmx, но я не могу понять, как использовать его в коде.

вот один пример отображения:

       <Function Name="pa_crud_broker_ADD" Aggregate="false" BuiltIn="false" NiladicFunction="false" IsComposable="false" ParameterTypeSemantics="AllowImplicitConversion" Schema="dbo">
          <Parameter Name="BrokerId" Type="int" Mode="InOut" />
          <Parameter Name="Name" Type="nvarchar" Mode="In" />
          <Parameter Name="Identifier" Type="nvarchar" Mode="In" />
        </Function>

          <FunctionImport Name="pa_crud_broker_ADD" ReturnType="Collection(Int32)">
            <Parameter Name="BrokerId" Mode="InOut" Type="Int32" />
            <Parameter Name="Name" Mode="In" Type="String" />
            <Parameter Name="Identifier" Mode="In" Type="String" /></FunctionImport>
<FunctionImportMapping FunctionImportName="pa_crud_broker_ADD" FunctionName="PAEntities.store.pa_crud_broker_ADD" />

Буду признателен за любую помощь.

Спасибо.

Ответы [ 3 ]

3 голосов
/ 25 февраля 2010

Я немного заржавел, однако вы должны иметь возможность вызывать вашу функцию одним из двух способов. Если вы генерируете ObjectContext из вашей модели, то у вас должен быть метод в контексте вашего объекта, который соответствует имени вашей функции (в вашем случае, pa_crud_broker_ADD). Вы должны быть в состоянии назвать это так:

var objectContext = new MyObjectContext(...);
var result = objectContext.pa_crud_broker_ADD(...);

Если вы не генерируете ObjectContext из вашей модели, тогда вы сможете использовать следующее:

var objectContext = new ObjectContext(...);
var result = objectContext.ExecuteFunction<List<int>>("pa_crud_broker_ADD", ...);

Я не совсем уверен насчет результата во втором случае. Я не уверен, поддерживает ли EF v1 такое преобразование или нет. Я знаю, что EF v4 добавляет некоторые значительные улучшения в этой области, поэтому, если EF v1 не поддерживает его, я бы посмотрел на EF v4.

0 голосов
/ 22 августа 2012

Я столкнулся с этим и обнаружил, что мне не хватает шага «Импорт функции», который описан здесь: http://weblogs.asp.net/dotnetstories/archive/2011/03/01/using-stored-procedures-with-entity-framework-in-an-asp-net-application.aspx

В двух словах:

  1. Откройте свой .edmxdesigner
  2. Щелкните правой кнопкой мыши и выберите в меню add -> «Импорт функции».
  3. Выберите хранимую процедуру из раскрывающегося списка.
  4. Добавьте имя.
  5. Нажмите ок.
0 голосов
/ 25 февраля 2010

У меня сложилось впечатление, что вы не можете вызывать хранимые проксы ... Entity Framework вызывает их за вас ... в основном хранимые прокы являются необязательной заменой генерации SQL в реальном времени, а Entity Framework вызывает их по мере необходимости.

Я не слышал о возможности вручную "вызывать" хранимые процессы в Entity Framework ...

...