.net – 是否可以检查对象是否已经连接到Entity Framework中的数据上下文?

我得到以下错误尝试附加已经附加到一个给定的上下文通过context.AttachTo(…)的对象:

An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key.

是否有一种方法来实现以下的线:

context.IsAttachedTo(…)

干杯!

编辑:

Jason概述的扩展方法很接近,但它不适用于我的情况。

我试图做一些工作使用在另一个问题的答案中概述的方法:

How do I delete one or more rows from my table using Linq to Entities *without* retrieving the rows first?

我的代码看起来有点像这样:

var user = new User() { Id = 1 };
context.AttachTo("Users", user);
comment.User = user;
context.SaveChanges();

这工作正常,除非我为该用户做其他我使用相同的方法,并尝试附加一个虚拟的User对象。这失败,因为我以前附加了该虚拟用户对象。我如何检查这个?

这是我结束了,这工作非常好:

public static void AttachToOrGet<T>(this ObjectContext context, string entitySetName, ref T entity)
    where T : IEntityWithKey
{
    ObjectStateEntry entry;
    // Track whether we need to perform an attach
    bool attach = false;
    if (
        context.ObjectStateManager.TryGetObjectStateEntry
            (
                context.CreateEntityKey(entitySetName, entity),
                out entry
            )
        )
    {
        // Re-attach if necessary
        attach = entry.State == EntityState.Detached;
        // Get the discovered entity to the ref
        entity = (T)entry.Entity;
    }
    else
    {
        // Attach for the first time
        attach = true;
    }
    if (attach)
        context.AttachTo(entitySetName, entity);
}

您可以如下调用它:

User user = new User() { Id = 1 };
II.AttachToOrGet<Users>("Users", ref user);

这工作非常好,因为它只是像context.AttachTo(…),除了你可以使用我上面每次引用的ID技巧。你最终得到了之前附加的对象或者你自己的对象。调用CreateEntityKey上下文确保它是好的和通用的,并且将工作甚至与复合键,没有进一步的编码(因为EF可以已经为我们!)。

http://stackoverflow.com/questions/1715501/is-is-possible-to-check-if-an-object-is-already-attached-to-a-data-context-in-en

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:.net – 是否可以检查对象是否已经连接到Entity Framework中的数据上下文?