entity-framework - 在 ADO.Net 数据服务中,如何检查实体是否已在上下文中?

标签 entity-framework wcf-data-services

我有一个用于导入数据的 ADO.Net 数据服务。大多数实体都链接到许多实体。要在导入期间执行此操作,我首先创建这些实体,保存它们,然后使用 .SetLink(EntityImport, "NavigationProperty", CreatedEntity)。现在我遇到的第一个问题是上下文并不总是知道 CreatedEntity(这是由于每个实体都是独立导入的,并且在创建每个项目时都会创建一个上下文 - 我想保留这个功能- 即我试图避免“只使用一个上下文”作为答案)。

所以在尝试调用 SetLink 之前,我有一个 .AddToCreatedEntityType(CreatedEntity)。这当然是第一次工作,但在第二次通过时,我收到错误消息“上下文已经在跟踪实体”。

有没有办法检查上下文是否已经在跟踪实体(context.Contains(CreatedEntity) 尚未实现)?我正在考虑尝试 try catch 并避免错误,但这似乎每次通过都会创建一个新的 CreatedEntity 。看起来我每次都需要使用 LINQ to Data Services 来获取 CreatedEntity,但这似乎效率低下 - 有什么建议吗?

最佳答案

我认为你应该看看 EntityState您的实体的属性(property)。

只有当它的值是 EntityState.Detached 时,你才必须将它添加到你的上下文中。

不要忘记以下备注:

This enumeration has a FlagsAttribute attribute that allows a bitwise combination of its member values.

我会创建一个扩展方法:

public static class EntityObjectExtensions
{
    public static Boolean IsTracked(this EntityObject self)
    {
        return (self.EntityState & EntityState.Detached) != EntityState.Detached;
    }
}

关于entity-framework - 在 ADO.Net 数据服务中,如何检查实体是否已在上下文中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/228595/

相关文章:

.net - 如何在 EF Code First 中映射表拆分?

odata - 编写自定义 OData uri 解析器或自定义 IQueryable 提供程序哪个更容易?

c# - 为什么 WCF 服务在持久化新实体之前执行所有查询?

asp.net - 如何在 asp.net 中创建 RESTful web 服务?

sql - WCF 服务中断对数据库的调用

c# - 另一个 System.InvalidOperationException : Sequence contains no elements (using . Any())

entity-framework - 使用具有工作单元的 Entity Framework 使用通用存储库模式连接多个表

c# - 如何使用 Entity Framework 更改另一个现有实体的相关实体

c# - 区分和排序列表 LINQ

silverlight - SL 4 和 WCF 数据服务 : InvalidOperationException -> SecurityException