2010-03-27 27 views
0

我喜欢使用LINQ to SQL。唯一的问题是我不喜欢更新表的默认方式。如何在LINQ to SQL中进行UPDATE查询?

比方说,我有以下几列如下表:

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

当我需要更新我称之为

UPDATE ... WHERE [email protected] 

的LINQ to SQL调用

UPDATE ... WHERE [email protected] and [email protected] and [email protected] and [email protected] and [email protected] and [email protected] 

我可以通过添加

来覆盖此行为
UpdateCheck=UpdateCheck.Never 

添加到每列,但每次使用GUI更新DataContext类时,都将被删除。有什么办法可以告诉LINQ使用这种更新数据的方式吗?

回答

2

我很困惑这个说法:

但与GUI DataContext类的每次更新,这将被删除。有什么办法可以告诉LINQ使用这种更新数据的方式吗?

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

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

请注意:更新使用LINQ到SQL的“默认方式”被称为optimistic concurrency,并且是防止来自多个用户的更新冲突的方法。如果你关闭此功能通过使用上述方法,你必须做好应对的事实,如果两个用户在同一时间打开相同的记录,第二个用户的更改将覆盖第一用户的更改没有任何警告或确认。确保这是你真正想要的行为。

+0

是的,但它在您使用(例如)timestamp列 – RobS 2010-03-27 17:35:14

+0

@Rob桑德斯的情况下失败:'rowversion'柱(又名'timestamp')是特别。这个名字是有原因的。除非您打算将它们用于复制或同步(在这种情况下,它们不应包含在DBML中)或用于并发控制(在这种情况下,您总是需要更新检查),否则它们不应该成为模式的一部分。 – Aaronaught 2010-03-27 17:42:37

+0

是的,我知道什么是rowversion列。事实是,L2S允许你将它们添加到DBML中,所以值得了解对LS2并发模型的影响 – RobS 2010-03-27 17:45:17

0

不幸的是,没有,没有。您必须在生成(或更新)之后手动编辑DBML - 这是一种痛苦(或者如另一个答案中已经提到的那样使用Designer)。

当我最后一次使用L2S的一个项目,我写了一个快速的工具,它跑了一代和后固定起来,但它是其中(c)不应该要求恕我直言不必要的痛苦。

0

自己跑进这一个。诀窍是改变生成DBML的方式 - 例如使用l2st4。然后,您可以将烦人的UpdateCheck属性设置为永远不会修改模板。