2015-09-22 5 views
1

Я использую сущность framework и azure для db. Дело в том, что EF не работает нормально с хранимыми процедурами, когда они не возвращают поля из моделей. Автоматически сгенерированный код в файле model.Context.cs возвращает целое число.Использование EntityCommand для вызова хранимых процедур, но результат всегда пуст

 public virtual int GetLogTransaction(Nullable<long> transactionId) 
    { 
     var transactionIdParameter = transactionId.HasValue ? 
      new ObjectParameter("transactionId", transactionId) : 
      new ObjectParameter("transactionId", typeof(long)); 

     return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("IHUBEntities.GetLogTransaction", transactionIdParameter); 
    } 

Поэтому я решил избежать этого файла и использовать EntityCommand для подключения к db и выполнения моей процедуры.

 EntityConnection sqlConnection = new EntityConnection("name=IHUBEntities"); 
     sqlConnection.Open(); 
     using (EntityCommand cmd = sqlConnection.CreateCommand()) 
     { 

      LogTransactionInfor lgInfor = new LogTransactionInfor(); 
      try 
      { 
       cmd.CommandText = "IHUBEntities.GetLogTransaction"; 
       cmd.CommandType = CommandType.StoredProcedure; 
       EntityParameter param = new EntityParameter(); 
       param.Value = transactionId; 
       param.ParameterName = "transactionId"; 
       cmd.Parameters.Add(param); 
       using (EntityDataReader reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess)) 
       { 
        while (reader.Read()) 
        { 
         //get reader content here 
        } 

       } 
       cmd.Connection.Close(); 

      }catch (Exception ex) 
      { 
       lgInfor.err = ex.StackTrace; 
       Console.Write(ex.StackTrace); 
       cmd.Connection.Close(); 
      } 
      finally 
      { 
       cmd.Dispose(); 
      } 
      return lgInfor; 
     } 

Проблема заключается в том, что читатель всегда пуст, дайте мне нулевые результаты. Однако, когда я использую один и тот же входной параметр для тестирования на db sql, он вернет желаемый результат. Итак, я думаю, проблема может быть связана с тем, что я написал процедуру?

CREATE PROCEDURE [dbo].[GetLogTransaction] 
@transactionId bigint = 0 
AS 
DECLARE 
@tablename nvarchar(261), 

@obj_name nvarchar(4000), 
@pk bigint, 
@pk_name nvarchar(500), 
@opt nvarchar(20), 
@usrId bigint, 
@usrName nvarchar(200), 
@sql nvarchar(4000), 
@cn int 
    DECLARE 
@userTable table(
    usrId bigint, 
    usrName nvarchar(200) 
) 
    BEGIN 

//select from different tables and set values to parameters 
...... 

    select @obj_name as obj_name, @pk as pk, @pk_name as pk_name, @opt as opt, @usrId as usrId, @usrName as usrName 
    END 

ответ

0

Предполагаю, что вы используете «Database First».

Правильно ли вы задали возвращаемый тип хранимой процедуры?

К сожалению, я немного новых, так что я не знаю, как загружать изображения, но: 1) Откройте EDMX-файл
2) В браузере модели, найти «Функция импорта»
3) Дважды щелкните по хранимой процедуре.
4) Нажмите «Получить информацию о столбцах».
5) Нажмите «Обновить».
6) Сделано!

Если хранимая процедура не отображается в «Импорт функций», вам необходимо обновить свою модель из базы данных.

+0

Большое вам спасибо за это! Оно работает. Я совершенно новичок в структуре сущности, и эта проблема вызывает у меня сумасшествие в течение нескольких дней. – mazeRunner

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