我喜欢使用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使用这种更新数据的方式?
答案 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)