在 LinqToSql 中,加载行、更改列并将更改提交到数据库非常容易:
using (MyDataContext wdc = new MyDataContext())
{
Article article = wdc.Article.First(p => p.ID == id);
article.ItemsInStock = itemsinstock;
wdc.SubmitChanges();
}
唯一的缺点:文章很大。 要加载整篇文章,仅更新一列是多余的,并且会显着降低我的应用程序的速度。
有没有一种方法可以使用 LINQ 更新单个列,而不必加载整行?
现在我恢复使用 ExecuteCommand,速度至关重要,但这很丑陋且容易出错:
wdc.ExecuteCommand("UPDATE Article SET ItemsInStock = @1 WHERE ID = @2", itemsinstock,id);
最佳答案
您需要将 Article 类的所有属性的 UpdateCheck 除了主键(单击 LINQ2SQL 设计器中的类属性并切换到属性工具窗口)设置为从不(不确定 WhenChanged,也许这也有效 - 继续并试验一下!)。
这将强制使用 LINQ2SQL
UPDATE ... SET ... WHERE ID = @2
而不是在 WHERE 子句中包含所有列的长版本:
UPDATE ... SET ... WHERE ID = @2 AND ItemsInStock = @1 AND SomeOtherColumn = @3 AND...
现在你可以使用如下代码
context.Articles.Attach(article /* article with updated values */, new Article { ID = articleID, ItemsInStock = -1 } /* pretend that this is the original article */);
context.SubmitChanges();
基本上你指出只有 ItemsInStock 属性发生了变化 - 其他 Prop 应该具有相同的默认值,articleID 当然是相同的。
注意:您不需要在此之前获取文章。
关于c# - 如何在不加载整行的情况下更新 LINQ 中的单个列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/221475/