c# - 如何判断 Linq 对象是否已附加到数据上下文?

标签 c# linq linq-to-sql

使用 Linq-to-Sql:

MyClass obj;
...
// need to delete this object
dataContext.GetTable(obj.GetType()).DeleteOnSubmit(obj);

但是

我不知道 obj 是否已附加到数据上下文。如果没有,最后一次调用 DeleteOnSubmit 会引发异常。

必须有一种简单的方法来判断 obj 是否附加到 dataContext - 但我看不到任何明显的东西。

你是怎么做到的?

最佳答案

虽然您可能想要查看您的设计,但由于这类事情应该是您可以确定性地弄清楚的事情,所以它是可能的。

不幸的是,确定对象是否已附加(或者,在 L2S 的内部命名法中,“已跟踪”)的确切调用要求您调用 Context.Services.ChangeTracker.GetTrackedObject,它是 内部。我能看到的最接近的事情是调用 Table.GetOriginalEntityState,传入有问题的实体。如果返回值为 null,则该对象未被跟踪(未附加)。如果返回值为非null,则对象被跟踪(附加)。

请注意,我还没有实际测试过它,但查看 Reflector 中的代码给我的印象是它应该适合你。

关于c# - 如何判断 Linq 对象是否已附加到数据上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1940716/

相关文章:

c# - 将确定性路径代码从 C# 转换为 C++

c# - 在 LINQ 查询中创建嵌套在对象中的列表

c# - 扩展 IQueryable 以返回属性包含字符串的对象

visual-studio - 在 DBML 设计器中快速查找(搜索)表?

c# - 使用 c# 从具有概率加权的列表中选择随机项?

c# - 以编程方式设置按钮图像

c# - 如何使用 Union 在 LINQ 中以匿名类型分配可为 null 的 int 属性?

c# - 如果在具有自动增量的表上调用多个插入,Linq to SQL Datacontext 不会提交

c# - 常见的扩展方法属于项目的哪一层?

c# - 如何比较两个列表中的值