• EF4.1之覆盖EF的默认的约定


    覆盖EF默认的约定可以通过两种方式:

     1、拦截模型构建器,使用流畅的API

     2、通过给 类添加标签

    好的,我还用之前定义的订单类来做例子:

        public class Order
        {
            public int OrderId { set; get; }
            
            public string OrderCode { set; get; }
            
            public string CustormName { set; get; }
         }

    模型构建器

    使用构建器,就必须要重写 方法:OnModelCreating

            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
                base.OnModelCreating(modelBuilder);
    
             }

    通过参数 modelbuilder进行修改其默认的约定:

                modelBuilder.Entity<Order>().ToTable("efdemo.Order");//效果同下
                modelBuilder.Entity<Order>().ToTable("Order", "efdemo");

    上面执行的修改了表个架构,默认是根据登录的用户进行创建的数据库表的架构,sa 是dbo

    下面是对表的属性就行修改:

    1             modelBuilder.Entity<Order>().Property(o => o.OrderId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);//可以设置成 自动增长的(默认是自动增长的,可以取消)
    2 
    3             modelBuilder.Entity<Order>().Property(o => o.OrderCode).IsRequired()//不能为空
    4                 .HasMaxLength(11)//设置最大长度
    5                 .HasColumnName("OrderBM");//设置生成数据库中表 对应的 字段名
    6             modelBuilder.Entity<Order>().Property(o => o.CustormName).IsRequired()
    7                 .HasMaxLength(32);

    使用标签

     1     public class Order
     2     {
     3         [Required]
     4         [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
     5         public int OrderId { set; get; }//默认的约定;EF 查找类里面时候还有 ID后 类名+ID字段,有就将其设置为主键
     6         [MaxLength(12)]
     7         public string OrderCode { set; get; }
     8         
     9         public string CustormName { set; get; }
    10     }

    最后进行总结一下,到底是应该使用哪一个,下面就行总结:

    首先先论述各自的优点:

    使用模型构建器:

    优点:流畅的API,支持泛型委托:Lambda表达式,很爽。并且可以使用链式编程

                 有智能提示,有编译时的错误检查

                 纯粹的POCO,没有修改模型

    使用 标签:

    优点:简单明了,并且可以实现错误检查

    但是他们也有的各自的不足,比如:

     1、使用标签不能对表名,表的架构进行修改

     2、使用构建器,不能对字段的 最小长度进行设置

     3、使用构建器,不能对字段的正则表达式进行设置

    但是将构建器和标签结合起来就可以实现了,

    所以我认为:

    使用构建器约束数据类型,

    使用标签来丰富我们的模型。

  • 相关阅读:
    NOIP2017 时间复杂度 大模拟
    【Python】CV2的一些基本操作
    【Python】类、对象、self
    【Ubuntu18.04】清空回收站
    小飞机可以解决git clone没有返回的问题吗?
    sqlserver2005 远程服务器数据 完全拷贝 到本地数据库
    Microsoft Visual Studio 2005 多线程时 解决不是该线程创建的来访问
    MS SqL2000 数据库置疑状态的解决方法[转]
    vue 函数配置项watch以及函数 $watch 源码分享
    Vue生命周期之beforeCreate vue 生命周期详解
  • 原文地址:https://www.cnblogs.com/xiaoxiaogogo/p/3419395.html
Copyright © 2020-2023  润新知