Jon*_*ood 3 c# sql-server entity-framework dbcontext
我正在使用实体框架,并且想要执行批量更新。加载每一行、更新这些行,然后将它们保存回数据库的效率太低了。
所以我更愿意使用DbContext.Database.ExecuteSqlCommand(). 但是,如何使用此方法来更新 ID 列表中包含的 ID 的所有行呢?
这是我到目前为止所拥有的。
IEnumerable<int> Ids;
DbContext.Database.ExecuteSqlCommand("UPDATE Messages SET Viewed = 1 WHERE Id IN (@list)", Ids);
Run Code Online (Sandbox Code Playgroud)
我意识到我可以使用正确的查询手动构建一个字符串,但我更愿意按照通常建议的方式传递参数。
有什么办法可以实现这一点吗?
您仍然可以构建参数并将它们包含在参数化查询中。
生成时查询看起来像这样
UPDATE Messages SET Viewed = 1 WHERE Id IN (@p0, @p1, @p2, ..., @pn)
Run Code Online (Sandbox Code Playgroud)
所以给出
IEnumerable<int> Ids;
Run Code Online (Sandbox Code Playgroud)
然后
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());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1676 次 |
| 最近记录: |