如何在LINQ to SQL中进行UPDATE查询?

时间:2010-03-27 16:51:13

标签: asp.net-mvc linq-to-sql

我喜欢使用LINQ to SQL。唯一的问题是我不喜欢更新表的默认方式。

假设我的下表包含以下列:

ID (primary key), value1, value2, value3, value4, value5

当我需要更新我呼叫的内容时

UPDATE ... WHERE ID=@id

LINQ to SQL调用

UPDATE ... WHERE ID=@id and value1=@value1 and value2=@value2 and value3=@value3 and value4=@value4 and value5=@value5

我可以通过添加

来覆盖此行为
UpdateCheck=UpdateCheck.Never

到每一列,但每次使用GUI更新DataContext类时,都会被删除。有没有办法告诉LINQ使用这种更新数据的方式?

4 个答案:

答案 0 :(得分:2)

我对这句话感到困惑:

  

但是每次使用GUI更新DataContext类时,都会被删除。有没有办法告诉LINQ使用这种更新数据的方式?

通过“GUI”,你的意思是Linq to SQL设计师?因为每个成员的属性表都有一个“更新检查”属性,您可以将其设置为“从不”。如果您手动编辑.designer.cs文件,请不要这样做,而是更改实际设计器中的Update Check设置。

Designer Screen http://img29.imageshack.us/img29/7912/updatecheckdesigner.png

请注意:Linq用于SQL的“默认方式”称为optimistic concurrency,这是一种防止多个用户发生冲突更新的方法。如果您使用上述方法关闭此功能,则必须准备好处理以下事实:如果两个用户同时打开相同的记录,则第二个用户的更改将覆盖第一个用户的更改,而不会发出任何警告或确认。确保这是你真正想要的行为。

答案 1 :(得分:0)

不幸的是,不,没有。您必须在生成(或更新)后手动编辑DBML - 这很痛苦(或使用其他答案中已提到的Designer)。

当我上次在一个项目中使用L2S时,我写了一个快速实用程序,它运行后代并修复它,但这是一个不必要的痛苦,(c)不应该被要求恕我直言。

答案 2 :(得分:0)

自己跑进这个。诀窍是改变生成DBML的方式 - 例如使用l2st4。然后你可以通过修改模板来设置那个讨厌的UpdateCheck属性。

答案 3 :(得分:0)

这就是Linq的工作方式。你为什么不喜欢这种更新行为?

阅读乐观并发

http://msdn.microsoft.com/en-us/library/bb399373.aspx