2016-12-28 47 views
0

执行我有一个存储过程,我称之为正是我的所有其他人一样(这工作正常),但它似乎只被执行时,我加计数()把它...存储过程只用计数

这是我的控制器代码:

 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(),但是executeqlcommand应该在你的情况下做得很好。