maxlego maxlego - 20 days ago 6
C# Question

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

Answer

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);