Question
Est-il possible de définir une contrainte unique sur une propriété en utilisant soit la syntaxe courante, soit un attribut? Si non, quelles sont les solutions de contournement?
J'ai une classe d'utilisateurs avec une clé primaire, mais je voudrais m'assurer que l'adresse e-mail est également unique. Est-ce possible sans éditer directement la base de données?
Solution (basée sur la réponse de Matt)
public class MyContext : DbContext {
public DbSet<User> Users { get; set; }
public override int SaveChanges() {
foreach (var item in ChangeTracker.Entries<IModel>())
item.Entity.Modified = DateTime.Now;
return base.SaveChanges();
}
public class Initializer : IDatabaseInitializer<MyContext> {
public void InitializeDatabase(MyContext context) {
if (context.Database.Exists() && !context.Database.CompatibleWithModel(false))
context.Database.Delete();
if (!context.Database.Exists()) {
context.Database.Create();
context.Database.ExecuteSqlCommand("alter table Users add constraint UniqueUserEmail unique (Email)");
}
}
}
}