实体框架代码优先的唯一约束

是否可以使用流利的语法或属性在属性上定义唯一约束?如果没有,有什么解决方法?


我有一个带有主键的用户类,但是我想确保电子邮件地址也是唯一的。是否可以不直接编辑数据库而实现?


解决方案(基于马特的回答)


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)");

            }

        }

    }

}


慕少森
浏览 364回答 3
3回答

斯蒂芬大帝

从EF 6.1开始,现在可以:[Index(IsUnique = true)]public string EmailAddress { get; set; }严格来讲,这将为您提供唯一索引而不是唯一约束。对于大多数实际目的,它们是相同的。
打开App,查看更多内容
随时随地看视频慕课网APP