小白学习做项目(4)_使用EntityFramework实现Code First设计数据库(3)

     再开始之前,我们对项目的结构做了一些调整,具体步骤,参考我的劣作小白学习做项目(3)

     今天主要讲解的是如何将我们映射到数据库中的类的某些属性(即数据库的某些列)设置唯一性约束。和如何在创建之初,就进行初始化。

     来看我们的项目,我们User这个类想必大家已经很不陌生了,User类中的UserID是主键,肯定是不会重复的了,但是对于其他的一些属性,我们在业务考虑的时候是不是也应该对其有一定的限制呢?比如LoginName这个属性,在我们看来它也应该是唯一的吧,还有PhoneNumber和Email这两个属性,如果我们考虑这两个属性是对用户账户安全的一种保证,那么这两个值应该也是唯一的。那么我们就确定了,除了UserID以外,还有LoginName、PhoneNumber、Email这三个属性也要增加唯一约束。(想明白了怎么实现,不过感觉放在这个位置讲解,确实不合适,我失误了。( ▼-▼ ))

     不知道大家对这个类还有没有印象DropCreateOrderDatabaseWithSeedValueAlways,再次抱歉,这个唯一性约束功能的实现和我设想的有些出入。在DropCreateOrderDatabaseWithSeedValueAlways类我们要重写它父类的Seed方法,将我们的唯一约束注册进去。

    public class DropCreateOrderDatabaseWithSeedValueAlways : DropCreateDatabaseAlways<BlogContext>
    {
        protected override void Seed(BlogContext context)
        {
            context.Database.ExecuteSqlCommand("ALTER TABLE UserInfo ADD CONSTRAINT con_Unique_UserInfoes_LoginName UNIQUE (LoginName)");
            context.Database.ExecuteSqlCommand("ALTER TABLE UserInfo ADD CONSTRAINT con_Unique_UserInfoes_PhoneNumber UNIQUE (PhoneNumber)");
            context.Database.ExecuteSqlCommand("ALTER TABLE UserInfo ADD CONSTRAINT con_Unique_UserInfoes_Email UNIQUE (Email)");
        }
    }
}
SeedValueAlways

     大家也看到了,这到最后还是调用的sql语句去实现唯一性约束的。(汗颜!)

我们忘记这段的不愉快吧,回过头来看一下BlogContext类内部OnModelCreating方法,我们发现仅针对User一个类的配置就多达5行代码。当代码多了起来,我们便不好进行维护。我们今天便来对OnModelCreating方法内部做一些调整。

      EntityConfig这个文件夹,大家不知道有没有印象,这个文件夹就是用来放置我们每个Model文件夹下对应类的配置信息。

public class UserConfig : EntityTypeConfiguration<User>
    {
        public UserConfig()
        {
            this.ToTable("UserInfo");
            this.Property(s => s.Password).IsRequired().HasMaxLength(128);
            this.Property(s => s.LoginName).IsRequired().HasMaxLength(20);
            this.Property(s => s.PhoneNumber).HasMaxLength(20);
            this.Property(s => s.Email).HasMaxLength(128);
        }
    }
UserConfig

     再回到BlogContext类内部OnModelCreating方法中将我们自定义的配置类注册进去即可

     modelBuilder.Configurations.Add(new UserConfig());

posted @ 2015-11-09 20:59  上地之客  阅读(226)  评论(0编辑  收藏  举报