zoukankan      html  css  js  c++  java
  • 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、使用构建器,不能对字段的正则表达式进行设置

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

    所以我认为:

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

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

  • 相关阅读:
    js对象Array —— 使用.操作符和用['xxx']访问对象的区别
    JavaScript为字符串提供的一些常用方法
    ES6新增属性——,模板字符串`` 中可使用${ }代替‘+’字符串拼接
    【vue】使用vue+element搭建项目,Tree树形控件使用
    vue循环遍历List,Map,Array
    解决分页查询只能查到本页信息的问题
    vue之 js字符串驼峰和下划线互相转换
    PHP中的对象遍历技巧
    php类的复制(克隆)
    php类的自动加载
  • 原文地址:https://www.cnblogs.com/xiaoxiaogogo/p/3419395.html
Copyright © 2011-2022 走看看