Generic Way to Check If Entity Exists In Entity Framework?

Similar to Best way to check if object exists in Entity Framework?

I'm looking for a generic way to check for an entity in a DbSet. Something like this, which doesn't work:

private DbContext DbContext { get; set; }

private DbSet DbSet { get; set; }

public Boolean Exists(T entity) {
    return ((from item in this.DbSet
             where item == entity
             select item).Count() > 0);
}

The line where item == entity works in LINQ to SQL, but apparently not with LINQ to Entities. Since the entities may have different keys I can't have them all inherit from a common abstract with a known key for comparison.

I could do this, but I'm worried about the performance of catching exceptions as a verification process This doesn't work either since as long as the entity is detached the OriginalValues property can't be obtained:

public Boolean Exists(T entity) {
    try {
        var current = this.DbContext.Entry(entity).OriginalValues;
        // Won't reach this line if the entity isn't in the database yet
        return true;
    }
    catch (Exception ex) {
        return false;
    }
}

57
задан Community 23 May 2017 в 02:00
поделиться