覆盖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、使用构建器,不能对字段的正则表达式进行设置

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

所以我认为:

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

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

EF4.1之覆盖EF的默认的约定的更多相关文章

  1. 修改EF的默认约定模型的方式

    EF默认使用约定的模型,但是有时类不遵从约定,我们需要能够执行进一步的配置.对此有两种方法:数据注释和Fluent API 注释 class User { [Key] public int Key{ ...

  2. EF的默认映射以及如何使用Data Annotations和Fluent API配置数据库的映射

    I.EF的默认映射 上节我们创建项目,通过定义实体类就可以自动生成数据库,并且EF帮我们自动设置了数据库的主键.外键以及表名和字段的类型等,这就是EF的默认映射.具体分为: 数据库映射:Code Fi ...

  3. springboot项目中如何在pom文件覆盖starter中默认指定的jar版本号

    分两种情况: 1.项目继承自spring-boot-starter-parent  通过定义properties的方式改变starter中的默认版本 <!-- Inherit defaults ...

  4. How to: Initialize Business Objects with Default Property Values in Entity Framework 如何:在EF中用默认属性值初始化业务对象

    When designing business classes, a common task is to ensure that a newly created business object is ...

  5. 修改 EF的默认连接工厂为 Sql Server 而不是LocalDb

      当你用EF6创建一个新项目,不知你是否注意到默认的连接字符串使用了LocalDb而不是SQLServer.但你如果想把默认连接改用SQLSErver而不是LocalDb.这个其实很简单:只需修改下 ...

  6. 局部覆盖element-ui的默认样式

    最近项目中遇到的问题,只想在某个页面里面单独更改element-ui的样式,而不影响全局 有两种方法: 1.在需要更改的组件里新增一个style标签[重点:不要加scoped],然后直接获取class ...

  7. 如何局部覆盖element-ui的默认样式

  8. 第8条:覆盖equals时遵守通用约定

    如果不需要覆盖equals方法,那么就无需担心覆盖equals方法导致的错误. 什么时候不需要覆盖equals方法? 1.类的每个实例本质上是唯一的. 例如对于Thread,Object提供的equa ...

  9. Effective Java —— 覆盖equals时遵守通用约定

    本文参考 本篇文章参考自<Effective Java>第三版第十条"Obey the general contract when overriding equals" ...

随机推荐

  1. [BigData]关于HDFS的伪分布式安装和虚拟机网络的配置

    [BigData]关于Hadoop学习笔记第一天(段海涛老师)(三) 视频2: hadoop的应用在电商,"浏览了该商品的人还看了","浏览了该商品的人最终购买的&quo ...

  2. [未完成]关于DOM的总结

    这样有什么好处吗? 一但这些东西变成了节点对象,意味着每一个节点对象都会有很多属性和行为提供出来. 如果div是一个对象,那么就可以针对这个对象调用其中的一些方法,对div操作. 这个操作可以包括,比 ...

  3. 本机连接虚拟机Oracle时报错的解决办法

    虚拟机安装了Oracle服务器(桌面类)和客户端,里面使用plsql连接自己没有问题. 在本机连接虚拟机没有成功.虚拟机的地址是192.168.126.132,已经确认本机能ping通虚拟机. 先是报 ...

  4. Leetcode 190. Reverse Bits(反转比特数)

    Reverse bits of a given 32 bits unsigned integer. For example, given input 43261596 (represented in ...

  5. java性能

    一.关于性能的基本知识  1.性能的定义  在我们讨论怎样提高Java的性能之前,我们需要明白“性能“的真正含义.我们一般定义如下五个方面作为评判性能的标准.  1) 运算的性能----哪一个算法的执 ...

  6. Ajax中解析Json的两种方法详解

    eval();  //此方法不推荐 JSON.parse();  //推荐方法 一.两种方法的区别 我们先初始化一个json格式的对象: var jsonDate = '{ "name&qu ...

  7. Spring(3.2.3) - Beans(12): 属性占位符

    使用属性占位符可以将 Spring 配置文件中的部分元数据放在属性文件中设置,这样可以将相似的配置(如 JDBC 的参数配置)放在特定的属性文件中,如果只需要修改这部分配置,则无需修改 Spring ...

  8. SQL语句添加,删除主键

    IF EXISTS (SELECT * FROM sys.all_objects  WHERE  type_desc= N'主键名')begin --删除主键 alter table 表名 drop ...

  9. Linux命令(1):cd命令

    1.作用:改变工作目录: 2.格式:cd  [路径]  其中的路径为要改变的工作目录,可为相对路径或绝对路径 3.使用实例:[root@www uclinux]# cd /home/yourname/ ...

  10. ASP.NET下运用Memcached

    对于大型网站的高并发,在ASP.NET网站下的session性能并不高,所以造成人们一种印象,大型WEB项目使用JAVA的错觉,致使很多人吐槽微 软不给力,其实这好比拉不出怪地球引力,本文介绍Memc ...