2009-10-01 2 views
6

Я пытаюсь использовать хранимую процедуру в структуре сущности, которая ничего не возвращает. Хранимая процедура предназначена исключительно для ведения журнала.Сохраненные процедуры в структуре сущности

Я добавил функцию (щелчок правой кнопкой мыши -> добавить -> функция импорта), которая работает ТОЛЬКО, когда возвращаемое значение установлено на одно из объектов. Когда я меняю тип возврата на Int32, Bool или ничего или любое другое значение, чем объект, функция (метод) просто исчезает, как только я нажимаю кнопку сборки.

Любые предложения о том, как я могу получить эту сортировку?

ответ

7

На данный момент вы не можете - вы должны использовать одно из объектов, определенных в вашей модели (хотя я думал, что основные скалярные типы, такие как INT, тоже будут работать).

Вещи должны получить намного лучше с EF4 - выйдет в конце 2009 или начале 2010 года

Смотрите эти статьи некоторую информацию об этих новых возможностях:

Если ваш сохраненный proc предназначен исключительно для ведения журнала, я бы, вероятно, просто вывел его за пределы контекста Entity Framework и jus t вызвать хранимую процедуру хорошим старомодным способом ADO.NET ... зачем даже вкладывать все это в контекст EF? Вы не извлекаете, не манипулируете и не храните данные с помощью этой службы ведения журнала - просто сделайте ее статическим методом в статическом классе - держите ее просто!

Marc

5

Это один из способов выполнения хранимой процедуры из базы enitity:

  using (SEntities se = new SEntities()) 
      { 
       EntityConnection entityConnection = (EntityConnection)se.Connection; 
       DbConnection storeConnection = entityConnection.StoreConnection; 

       storeConnection.Open(); 

       DbCommand command = storeConnection.CreateCommand(); 
       command.CommandText = "NameOfStoredProcedure"; 
       command.CommandType = CommandType.StoredProcedure; 
       command.Parameters.Add(new SqlParameter("param1", value_of_param1)); 
       command.Parameters.Add(new SqlParameter("param2", value_of_param2)); 

       SqlParameter param3 = new SqlParameter(); 
       pA.SqlDbType = SqlDbType.Bit; 
       pA.ParameterName = "@param3"; 
       pA.Direction = ParameterDirection.Output; 
       command.Parameters.Add(param3); 

       command.ExecuteNonQuery(); 

       returnValue = Convert.ToBoolean(param3.Value); 
      } 
1

С EF 4.1, это возможно. До Ef 4.0 это невозможно. Вы можете использовать следующие строки для вызова зра в эф 4,1

res = ctx.Database.SqlQuery<MyResultType1>(...your SP call...); 

Для получения более подробных разъяснений см Handle Stored Procedure in Entity Framework

Смежные вопросы