当前位置:  开发笔记 > 编程语言 > 正文

如何更新LINQ中的单个列而不加载整行?

如何解决《如何更新LINQ中的单个列而不加载整行?》经验,为你挑选了1个好方法。

在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);

liggett78.. 9

您需要在Article类的所有属性上设置UpdateCheck,除了主键(单击LINQ2SQL设计器中的类属性并切换到属性工具窗口)到Never(不确定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属性已经改变 - 其他道具应该有相同的默认值,articleID当然是相同的.

注意:您不需要在此之前获取文章.



1> liggett78..:

您需要在Article类的所有属性上设置UpdateCheck,除了主键(单击LINQ2SQL设计器中的类属性并切换到属性工具窗口)到Never(不确定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属性已经改变 - 其他道具应该有相同的默认值,articleID当然是相同的.

注意:您不需要在此之前获取文章.

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有