Попробуйте этот метод расширения (это не проверено и не используется):
public static bool IsAttachedTo(this ObjectContext context, object entity) {
if(entity == null) {
throw new ArgumentNullException("entity");
}
ObjectStateEntry entry;
if(context.ObjectStateManager.TryGetObjectStateEntry(entity, out entry)) {
return (entry.State != EntityState.Detached);
}
return false;
}
Учитывая ситуацию, которую вы описываете при редактировании, вам может понадобиться следующая перегрузка, которая принимает EntityKey
вместо объекта:
public static bool IsAttachedTo(this ObjectContext, 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;
}
Чтобы построить EntityKey
в вашей ситуации, используйте в качестве руководства следующее:
EntityKey key = new EntityKey("MyEntities.User", "Id", 1);
Вы можете получить EntityKey
из существующего экземпляра User
, используя свойство User.EntityKey
(из интерфейса IEntityWithKey
).