Search code examples
c#entity-framework-4ef-code-first

what is the most reasonable way to find out if entity is attached to dbContext or not?


when i try to attach entity to context i get an exception

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

This is expected behaviour.

But i would like to know how ObjectStateManager knows that? I would like to do this check by myself before


Solution

  • If you are using DbContext API (you mentioned ef-code-first) you can simply use:

    context.YourEntities.Local.Any(e => e.Id == id);
    

    or more complex

    context.ChangeTracker.Entries<YourEntity>().Any(e => e.Entity.Id == id);
    

    In case of ObjectContext API you can use:

    context.ObjectStateManager.GetObjectStateEntries(~EntityState.Detached)
                              .Where(e => !e.IsRelationship)
                              .Select(e => e.Entity)
                              .OfType<YourEntity>()
                              .Any(x => x.Id == id);