3

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

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

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

4

2 回答 2

5

I think you should look at the EntityState property of your entity.

Only if it is of the value EntityState.Detached than you have to add it to your context.

Do not forget the following remark:

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

I would create a extension method:

public static class EntityObjectExtensions
{
    public static Boolean IsTracked(this EntityObject self)
    {
        return (self.EntityState & EntityState.Detached) != EntityState.Detached;
    }
}
于 2008-10-23T07:09:44.240 回答
3

在尝试检查上下文是否正在跟踪我想要更新(或添加)的实体时,当我发现 context.Entites.Contains(currentItem) 不起作用时,我感到非常失望。

我使用以下方法解决了它:

if (context.Entities.Where(entities => entities.Entity == currentItem).Any())
{
   this.service.UpdateObject(currentItem);                    
}
于 2008-11-10T05:19:11.543 回答