使用Linq-to-Sql:
MyClass obj;
...
// need to delete this object
dataContext.GetTable(obj.GetType()).DeleteOnSubmit(obj);
BUT
我不知道obj
是否已附加到数据上下文。如果没有,最后一次调用DeleteOnSubmit会抛出异常。
必须有一种简单的方法来判断obj
是否附加到dataContext
- 但我看不到任何明显的事情。
你是怎么做到的?
答案 0 :(得分:4)
虽然您可能想看一下您的设计,但由于这类事情应该是您可以确定性地确定的事情,所以可以这样做。
不幸的是,确定对象是否已附加的确切调用(或者,在L2S的内部命名法中,“已跟踪”)要求您调用Context.Services.ChangeTracker.GetTrackedObject
,即internal
。我能看到的最接近的事情是调用Table.GetOriginalEntityState
,传入相关实体。如果返回值为null
,则对象未跟踪(未附加)。如果返回值为非null
,则跟踪(附加)对象。
请注意,我实际上没有对此进行过测试,但查看Reflector中的代码会让我觉得这应该适合您。
答案 1 :(得分:0)
Link2SQL,我猜?这应该从您的代码中显而易见。您真的需要在运行时动态查询状态吗? 只有从dataContext中获取obj才会附加obj。
我问similar question a while ago。也许Robert Harvey的评论对你有帮助。
答案 2 :(得分:0)
通过查看PropertyChanging和PropertyChanged事件,可以判断对象是否附加到数据上下文的一种方法。
我的实体上有一个方法可以按如下方式分离它们:
public virtual void Detach()
{
PropertyChanging = null;
PropertyChanged = null;
}
因此,如果这两个属性不为null,则附加对象。
兰迪