Тщательно проверьте, существует ли электронная почта, 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 на этой программе), поэтому я хотел получить совет специалиста, на этот раз.

2 ответа

Решение

Создайте уникальное ограничение, как сказал Джон. Вы можете понять, как это сделать из этого вопроса:

SQL Server 2005 Как создать уникальное ограничение?

That will ensure a duplicate never occurs.

Там вы загружаете ВСЕХ участников и запрашиваете коллекцию в памяти.

Это выполняет запрос в БД:

//this of course goes inside the transaction
if session.Query<Member>().Any(i => i.Email == email))
    return MembershipCreateStatus.DuplicateEmail;
Другие вопросы по тегам