我有一个用于导入数据的 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/