Код EntityFramework Сначала - проверьте, привязан ли Entity
Я пытаюсь обновить сущность с отношениями FK в EntityFramework 4.3 Code First.
Я пытаюсь подключиться к связанным с ним причинам, вызывая: Entry (item).State = EntityState.Unchanged
Я получаю следующее исключение: Объект с тем же ключом уже существует в ObjectStateManager. ObjectStateManager не может отслеживать несколько объектов с одним и тем же ключом.
Я не обновляю эти элементы и не имею свойство id для них на моем основном объекте.
Можно ли узнать, какие объекты прикреплены или нет?
Спасибо заранее,
Radu
Ответы
Ответ 1
Здесь вы можете найти ответ .
public bool Exists<T>(T entity) where T : class
{
return this.Set<T>().Local.Any(e => e == entity);
}
Поместите этот код в свой контекст или вы можете превратить его в расширение, подобное этому.
public static bool Exists<TContext, TEntity>(this TContext context, TEntity entity)
where TContext : DbContext
where TEntity : class
{
return context.Set<TEntity>().Local.Any(e => e == entity);
}
Ответ 2
Вы можете использовать этот метод:
/// <summary>
/// Determines whether the specified entity key is attached is attached.
/// </summary>
/// <param name="context">The context.</param>
/// <param name="key">The key.</param>
/// <returns>
/// <c>true</c> if the specified context is attached; otherwise, <c>false</c>.
/// </returns>
internal static bool IsAttached(this ObjectContext context, EntityKey key)
{
if (key == null)
{
throw new ArgumentNullException("key");
}
ObjectStateEntry entry;
if (context.ObjectStateManager.TryGetObjectStateEntry(key, out entry))
{
return (entry.State != EntityState.Detached);
}
return false;
}
Например:
if (!_objectContext.IsAttached(entity.EntityKey))
{
_objectContext.Attach(entity);
}