我正在使用实体框架,并且想要执行批量更新。加载每一行、更新这些行,然后将它们保存回数据库的效率太低了。
所以我更喜欢使用DbContext.Database.ExecuteSqlCommand()
。但是,如何使用此方法来更新 ID 列表中包含的 ID 的所有行呢?
这是我到目前为止所拥有的。
IEnumerable<int> Ids;
DbContext.Database.ExecuteSqlCommand("UPDATE Messages SET Viewed = 1 WHERE Id IN (@list)", Ids);
我意识到我可以使用正确的查询手动构建一个字符串,但我更愿意按照通常建议的方式传递参数。
有什么办法可以实现这一点吗?
您仍然可以构建参数并将它们包含在参数化查询中。
生成的查询看起来像这样
UPDATE Messages SET Viewed = 1 WHERE Id IN (@p0, @p1, @p2, ..., @pn)
所以给出
IEnumerable<int> Ids;
Then
var parameters = Ids.Select((id, index) => new SqlParameter(string.Format("@p{0}", index), id));
var parameterNames = string.Join(", ", parameters.Select(p => p.ParameterName));
var query = string.Format("UPDATE Messages SET Viewed = 1 WHERE Id IN ({0})", parameterNames);
int affected = DbContext.Database.ExecuteSqlCommand(query, parameters.ToArray());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)