zoukankan      html  css  js  c++  java
  • 小白学习做项目(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());

  • 相关阅读:
    洛谷 P2015 二叉苹果树
    Codeforces 1220D Alex and Julian (数论)
    算法-图(1)Dijkstra求最短路径
    计算机网络-网络层(3)DHCP协议
    计算机网络-网络层(2)NAT协议
    计算机网络-网络层(1)IPv4和IPv6
    计算机网络-网络层(0)网络层综述
    计算机网络-传输层(3)TCP协议与拥堵控制
    计算机网络-传输层(2)流水线协议和滑动窗口协议
    计算机网络-传输层(1)UDP协议
  • 原文地址:https://www.cnblogs.com/zk3113/p/4951113.html
Copyright © 2011-2022 走看看