LINQ to SQL:如何在不检索整个实体的情况下更新唯一字段

And*_*rko 10 .net linq-to-sql

当我知道实体ID时,我想更新实体的唯一字段.

LINQ to SQL是否可以在不检索完整实体的情况下(DataContext中的所有字段都是开销)?是否可以创建并附加实体到DataContext并标记确切的字段以同步DataContext.SubmitChanges(或类似的东西)?

先感谢您!

lak*_*tak 8

是的你可以:

Foo foo=new Foo { FooId=fooId }; // create obj and set keys
context.Foos.Attach(foo);
foo.Name="test";
context.SubmitChanges();
Run Code Online (Sandbox Code Playgroud)

在您的Dbml中,为所有属性设置UpdateCheck ="Never".

这将生成一个没有select的单个更新语句.

需要注意的是:如果您希望能够将Name设置为null,则必须将foo对象初始化为不同的值,以便Linq可以检测到更改:

Foo foo=new Foo { FooId=fooId, Name="###" };
...
foo.Name=null;
Run Code Online (Sandbox Code Playgroud)

如果您想在更新时检查时间戳,也可以这样做:

Foo foo=new Foo { FooId=fooId, Modified=... }; 
// Modified needs to be set to UpdateCheck="Always" in the dbml
Run Code Online (Sandbox Code Playgroud)