Для моей модели аутентификации я хочу убедиться, что невозможно, чтобы одно и то же электронное письмо регистрировалось более одного раза. Я новичок в nHibernate и частично LINQ, поэтому я спрашиваю, достаточно ли этого достаточно «проверки», чтобы это произошло.Тщательно проверьте, существует ли электронная почта, NHibernate, LINQ
public MembershipCreateStatus CreateUser(string email, string password)
{
if (String.IsNullOrEmpty(email)) throw new ArgumentException("Value cannot be null or empty.", "userName");
if (String.IsNullOrEmpty(password)) throw new ArgumentException("Value cannot be null or empty.", "password");
using (var session = sessionFactory.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
var members = session.CreateCriteria<Member>().List<Member>();
// determine is the email address already exists in the database
if (members.Any(i => i.Email == email))
return MembershipCreateStatus.DuplicateEmail;
// create the new member, if they are valid
var member = new Member { Email = email };
session.SaveOrUpdate(member);
transaction.Commit();
}
}
return MembershipCreateStatus.Success;
}
Есть ли более интеллектуальный способ достижения этого? У меня были проблемы с этим в прошлом с предыдущей программой (я использовал Linq для SQL на этом), и поэтому на этот раз я хотел получить совет экспертов.
@Femaref: Не хватать, но что вы изменили? Я не могу определить никаких изменений. – Ciel
Я не обязательно знаю, как это сделать в NHibernate, но вы должны убедиться, что созданная транзакция является Serializable, так что дублирующий адрес электронной почты не вставлен между временем, которое вы проверяете, и временем, которое вы выполняете вставить. –
Stacey: форматирование. Некоторые из вашего кода не были отформатированы, так как они не были отступом должным образом. – Femaref