覆盖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

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

             modelBuilder.Entity<Order>().Property(o => o.OrderId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);//可以设置成 自动增长的(默认是自动增长的,可以取消)

             modelBuilder.Entity<Order>().Property(o => o.OrderCode).IsRequired()//不能为空
.HasMaxLength()//设置最大长度
.HasColumnName("OrderBM");//设置生成数据库中表 对应的 字段名
modelBuilder.Entity<Order>().Property(o => o.CustormName).IsRequired()
.HasMaxLength();

使用标签

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

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

首先先论述各自的优点:

使用模型构建器:

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

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

纯粹的POCO,没有修改模型

使用 标签:

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

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

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

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

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

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

所以我认为:

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

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

最新文章

  1. 我的第一篇博客/markdown
  2. Linux内核TCP/IP参数分析与调优
  3. 实现AJAX的基本步骤 。。转
  4. Reveal 配置与使用
  5. JDK1.7中调用javascript方法
  6. swfupload详细参数
  7. PL/SQL 动态SQL
  8. mongoose--------ORM数据操作框架
  9. 为什么Lisp语言如此先进?(译文) - 阮一峰的网络日志
  10. 链表中LinkList L与LinkList *L 借鉴
  11. path和classpath的用途
  12. Java并发编程深入学习
  13. Mac下安装FFmpeg教程
  14. Spring Boot Jpa 的使用
  15. 两个Map的对比,三种方法,将对比结果写入文件。
  16. SQL 自定义存储过程报错
  17. Qt编写自定义控件8-动画按钮组控件
  18. VB.NET datagridview的操作
  19. CentOS 上安装 nodejs v11.0.0
  20. sparkshell运行sql报错: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

热门文章

  1. [改善Java代码]使用匿名类的构造函数
  2. 【数论,思路】HDU-5288;多校#1-1001
  3. hdu 4005 边连通度与缩点
  4. Dynamic\Static\IsKinematic
  5. [算法练习] UVA-10010-Where&#39;s Waldorf?
  6. Nginx - Additional Modules, Content and Encoding
  7. HTTPClient模块的HttpGet和HttpPost
  8. jquery 解析xml字符串
  9. 第六篇、AVplayer定制视频播放控件
  10. (转)mysql、sqlserver、oracle的默认事务的隔离级别