Pour mon modèle d'authentification, je souhaite m'assurer qu'il est impossible que le même e-mail soit enregistré plusieurs fois. Je suis nouveau à la fois nHibernate et partiellement LINQ, donc je demande si cela est assez suffisant d'une «vérification» pour s'assurer que cela se produise.Vérifiez minutieusement si un e-mail existe, 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;
}
Existe-t-il un moyen plus intelligent d'accomplir cela? J'ai déjà eu des problèmes avec un programme précédent (j'ai utilisé Linq to SQL sur celui-là), et donc je voulais obtenir des conseils d'experts, cette fois-ci.
@Femaref: Ne vous plaignez pas, mais qu'avez-vous changé? Je ne peux pas identifier de changements. – Ciel
Je ne sais pas nécessairement comment le faire dans NHibernate, mais vous devez vous assurer que la transaction que vous créez est Serializable, de sorte qu'une adresse email dupliquée ne soit pas insérée entre le moment où vous vérifiez et le moment où vous effectuez votre insérer. –
Stacey: mise en forme. Une partie de votre code n'a pas été formatée car elle n'était pas correctement mise en retrait. – Femaref