0

У меня есть хранимая процедура, которую я называю так же, как все мои другие (которые работают нормально), но это только кажется, будет выполняться, когда я добавить Count() к нему ...хранимая процедура выполняется только с графом

Это мой код контроллера:

 public static void SaveGridLayout(string userName, string gridViewId, string layoutData) 
    { 
     using (var context = new Entities()) 
     { 
      var userNameParam = new SqlParameter("@user_name", userName); 
      var gridViewIdParam = new SqlParameter("@grid_id", gridViewId); 
      var layoutParam = new SqlParameter("@layout", layoutData); 

      context.Database.SqlQuery<UserGridLayoutsEntity>("sp_SaveLayout @user_name, @grid_id, @layout", userNameParam, gridViewIdParam, layoutParam); 
     } 
    } 

Это не дает никакого результата, но когда я изменить последнюю строку: context.Database.SqlQuery<UserGridLayoutsEntity>("sp_SaveLayout @user_name, @grid_id, @layout", userNameParam, gridViewIdParam, layoutParam).Count(); это делает и SP выполняется. Было бы неплохо как-то не добавлять счетчик и выполнять процедуру с самого начала. Спасибо!

+0

Это потому, что 'SqlQuery' является просто _query_, пока вы на самом деле ничего не делаете с результатами (например, считайте их). Если вы просто хотите немедленно выполнить инструкцию SQL и не получить никаких результатов, используйте «ExecuteSqlCommand». –

ответ

1
public static void SaveGridLayout(string userName, string gridViewId, string layoutData) 
{ 
    using (var context = new Entities()) 
    { 
     var userNameParam = new SqlParameter("@user_name", userName); 
     var gridViewIdParam = new SqlParameter("@grid_id", gridViewId); 
     var layoutParam = new SqlParameter("@layout", layoutData); 

     context.Database.ExecuteSqlCommand("sp_SaveLayout @user_name, @grid_id, @layout", userNameParam, gridViewIdParam, layoutParam); 
    } 
} 

Я думаю, вы можете выполнить его прямо так. С .SqlQuery вы даже можете использовать .ToList(), если нет .Count(), но executesqlcommand должен хорошо поработать в вашем случае.