【发布时间】:2009-05-12 18:26:13
【问题描述】:
有没有办法确定 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?
我能想到的唯一简单解决方案是将新记录的主键设置为负值(我的 PK 是一个身份字段,因此将在@987654322 上设置为正整数@)。这仅适用于检测新记录。它还需要身份 PK,并且需要控制创建新对象的代码。
有没有更好的方法来做到这一点?似乎 LINQ 必须在内部跟踪这些对象的状态,以便它可以知道在 context.SubmitChanges() 上做什么。有没有办法访问那个“对象状态”?
澄清 显然我最初的问题令人困惑。我不是在寻找插入或更新记录的方法。我正在寻找一种方法,给定任何 LINQ 对象,以确定该对象是否未插入(新)或自上次更新以来已更改(脏)。
【问题讨论】:
标签: c# linq linq-to-sql