Поскольку нет никакого способа добавить уникальное ограничение для сущностей в последней версии EF, я придумал идею. (Я знаю, что ограничения могут быть добавлены путем внедрения SQL)Уникальный Constraint Hack - Entity Framework
Я добавил метод в мой Repository класса:
private IDbSet<T> Entities;
public virtual bool Contains(Func<T, bool> predicate)
{
return Entities.Any(t => predicate(t));
}
Я думаю, что это заменит мою текущую логику предотвращения дубликата:
bool already exists = (from t in someSet.Entities
where t.UniqueColumn == entity.UniqueColumn select t).
FirstOrDefault() != null;
if(alreadyExists)
throw new Exception("Entity already exists in DB.");
Is это хорошая идея, что является лучшим способом предотвратить дублирование вставки/обновления в базу данных?
EDIT: Я редактировал метод Содержит для использования предиката. Теперь я могу написать такой код:
if(repository.Contains(t=> t.Email == "[email protected]")
throw new Exception("Email already exists.");
Можете ли вы проверить мое редактирование на Содержит метод, пожалуйста? Думаю, теперь это сработает. –