Jos*_*ant 8 c# linq linq-to-sql
有没有办法确定LINQ对象是否尚未插入数据库(新)或自上次更新(脏)后是否已更改?我计划将我的UI绑定到LINQ对象(使用WPF),并且需要它根据对象是否已经在数据库中而表现不同.
MyDataContext context = new MyDataContext();
MyObject obj;
if (new Random().NextDouble() > .5)
obj = new MyObject();
else
obj = context.MyObjects.First();
// How can I distinguish these two cases?
Run Code Online (Sandbox Code Playgroud)
我能想到的唯一简单的解决方案是将新记录的主键设置为负值(我的PK是一个标识字段,因此将设置为正整数INSERT).这仅适用于检测新记录.它还需要身份PK,并且需要控制创建新对象的代码.
有一个更好的方法吗?似乎LINQ必须在内部跟踪这些对象的状态,以便它可以知道该做什么context.SubmitChanges().有没有办法访问"对象状态"?
澄清 显然我的初步问题令人困惑.我不是在寻找插入或更新记录的方法.我正在寻找一种方法,给定任何LINQ对象,以确定该对象是否未插入(新)或自上次更新(脏)后是否已更改.
小智 14
ChangeSet changes = context.GetChangeSet();
如果changes.Inserts.Contains(yourObject)则为new,并在调用SubmitChanges时插入
如果changes.Updates.Contains(yourObject),它已经在数据库中,并将在SubmitChanges()上更新