Хотите ли вы общий способ проверить, была ли сущность загружена контекстом, или общий способ запроса базы данных, если сущность существует?
Для первого случая используйте:
public bool Exists<T>(T entity) where T: class
{
return this.Set<T>().Local.Any(e => e == entity);
}
Для последнего случая используйте (он также проверит загруженные объекты):
public bool Exists<T>(params object[] keys)
{
return (this.Set<T>().Find(keys) != null);
}
Edit:
Код EF сначала не предназначен для доступа к информации такого рода, но возможно получить имя ключей сущности. Я думаю, что-то подобное должно работать:
var objContext = ((IObjectContextAdapter)dbContext).ObjectContext;
var objSet = objContext.CreateObjectSet<T>();
var keyNames = objSet.EntitySet.ElementType.KeyMembers.Select(m => m.Name);
Но все это не имеет смысла. Вы хотите общий подход, но ваши сущности не делятся необходимой информацией, чтобы разрешить общий подход. Теперь вы говорите, что даже не знаете ключевых значений. Использование этого «общего» подхода потребует рефлексии и ручного построения дерева выражений.