Code First02---CodeFirst配置实体与数据库映射的两种方式
Code First有两种配置数据库映射的方式,一种是使用数据属性DataAnnotation,另一种是Fluent API.
这两种方式分别是什么呢?下面进行一一解释:
DataAnnotation的配置方式需要你给定义实体和值对象的类和类中的属性加上与数据库映射相关的配置标签。
比如说:我有一个实体类:Customers 按照Code First的规则,数据库的表名应该是跟这个一致Customers,但是如果我想表名为Customer,那怎么才能让实体识别到这个表名呢。
[Table(“CustomerInfo”)]
public class Customer·
{
…….
}
另外一种配置的方式是使用Fluent API,Code First Fluent API 是在DbContext中定义数据库配置的一种方式。要使用Fluent API 就必须在你自定义的继承自DbContext的类中重载OnModelCreating这个方法。这个方法的签名如下:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
通过modelBuilder这个对象的Entity<>泛型方法来配置DbContext中的每个类的数据库映射。
我们可以通过Fluent API 配置数据表的名字:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Customer>().ToTable(“CustomerInfo”)
}
其实在业务中我们都用Fluent API的方式去配置,这样才能提现出Code First的原则,即是代码和数据存储分离开来的理念。
好吧。说了这么多理论,下面介绍一个例子来介绍一下怎么使用Fluent API来实现。
那我们假设一个需求,假设我们的订单管理系统处理的都是个人客户,假设每个个人客户都是domain中的实体,假设实体的标识符是每个人的身份证号。假设我们的客户都是中国人,那么身份证号应该是18位。客户的名字应该不会太长,中国人的名字一般不会超过十个字吧?性别用M和F标识,我们还记录客户的地址和联系电话。我们假设客户的联系电话记录中国境内客户的手机号,现在的手机号一般都是13位。我们的实体类如下:

大家应该清楚按照Code First的规则,数据表的主键必须是int,并且名称必须是Id或者类名+Id。我们Customer表默认的主键应该是public int CustomerId{get;set;}。string类型默认会映射为nvarchar(max)
我们应该怎么写这个映射关系?

modelBuilder的Entity<T>方法的返回值都为EntityTypeConfiguration<T>
IsRequired():通过这个方法指定该列是not-null的。
HasMaxLength():设定nvarchar列的最大字符数。
HasPercision(percison,scale):设定decimal列的最大值和小数点后位数。
HasColumnType(“TypeName”):设定列的类型,但是指定的列的类型必须与类中的属性的类型相兼容。这个兼容规则后面将详细介绍。
HasDatabaseGeneratedOption(DatabaseGeneratedOption):指定列是否是自增长列。
DatabaseGeneratedOption有三个选项:Idnetity:自增长
None:非自增长
Computed:用于一些通过计算得到值的列。
modelBuilder的Entity<Customer>方法的返回值还有一个HasKey方法用于设置数据表的主键。
总结:这一节主要介绍了实体跟数据库表的对应映射。
Code First02---CodeFirst配置实体与数据库映射的两种方式的更多相关文章
- SqlServer2008 数据库同步的两种方式(Sql JOB)
尊重原著作:本文转载自http://www.cnblogs.com/tyb1222/archive/2011/05/27/2060075.html 数据库同步是一种比较常用的功能.下面介绍的就是数据库 ...
- (转)SqlServer 数据库同步的两种方式 (发布、订阅),主从数据库之间的同步
最近在琢磨主从数据库之间的同步,公司正好也需要,在园子里找了一下,看到这篇博文比较详细,比较简单,本人亲自按步骤来过,现在分享给大家. 在这里要提醒大家的是(为了更好的理解,以下是本人自己理解,如有错 ...
- SQL Server 2008 数据库同步的两种方式 (发布、订阅)
参考转载: SQL Server 2008 数据库同步的两种方式 (发布.订阅) 使用Sqlserver事务发布实现数据同步
- (转)SqlServer2008 数据库同步的两种方式 (发布、订阅)
上篇中说了通过SQL JOB的方式对数据库的同步,这一节作为上一节的延续介绍通过发布订阅的方式实现数据库之间的同步操作.发布订阅份为两个步骤:1.发布.2订阅.首先在数据源数据库服务器上对需要同步的数 ...
- SqlServer2008 数据库同步的两种方式 (发布、订阅)
尊重原著作:本文转载自http://www.cnblogs.com/tyb1222/archive/2011/05/31/2064944.html 上篇中说了通过SQL JOB的方式对数据库的同步,这 ...
- 【转】SQL Server 2008 数据库同步的两种方式 (发布、订阅)
上篇中说了通过SQL JOB的方式对数据库的同步,这一节作为上一节的延续介绍通过发布订阅的方式实现数据库之间的同步操作.发布订阅份为两个步骤:1.发布.2.订阅.首先在数据源数据库服务器上对需要同步的 ...
- SqlServer 数据库同步的两种方式 (发布、订阅),主从数据库之间的同步
最近在琢磨主从数据库之间的同步,公司正好也需要,在园子里找了一下,看到这篇博文比较详细,比较简单,本人亲自按步骤来过,现在分享给大家. 在这里要提醒大家的是(为了更好的理解,以下是本人自己理解,如有错 ...
- 国产化之 .NET Core 操作达梦数据库DM8的两种方式
背景 某个项目需要实现基础软件全部国产化,其中操作系统指定银河麒麟,数据库使用达梦V8,CPU平台的范围包括x64.龙芯.飞腾.鲲鹏等.考虑到这些基础产品对.NET的支持,最终选择了.NET Core ...
- hibernate级联查询映射的两种方式
Hibernate主要支持两种查询方式:HQL查询和Criteria查询.前者应用较为广发,后者也只是调用封装好的接口. 现在有一个问题,就是实现多表连接查询,且查询结果集不与任何一个实体类对应,怎么 ...
随机推荐
- HTML5系列一(属性概述)
HTML5概述 HTML5於2004年被WHATWG(网页超文本技术工作小组)提出,於2007年被W3C接纳 在2008年1月22日,第一份正式草案已公布.WHATWG表示该规范是目前正在进行的工作, ...
- Install latest R for ubuntu
### delete old version rm -rf /usr/local/lib/R /usr/lib/R ~/**/R sudo apt-get autoremove rstudio sud ...
- “我是谁?”-管理者的角色、职责与工作思路.ppt
http://doc.mbalib.com/view/95b6a675adeaf38a2c028bd4f53f0bf6.html 管理者的三大工作重心: 任务(目标).团队.规划.
- xbmc的静态链接办法
XBMC是一个相当酷的音频/视频播放器,号称家庭影视中心. 我是希望静态将一些库链接进可执行程序的,这样我用的ArchLinux就不用天天在更新一些东西了 但XBMC试了很多次,编译成功后,总是在运行 ...
- Visual Studio低版本升级到Visual Studio 2012出现Warning LNK4075
Warning LNK4075: ignoring '/EDITANDCONTINUE' due to '/SAFESEH' specification
- Description DisplayName Display的关系
Description DisplayName Display的关系 ?
- tomcat的文件路径 servelet的配置 以及maven中的WEB-INF的路径
Tomcat JavaWeb应用的组成结构 开发JavaWeb应用时,不同类型的文件有严格的存放规则,否则不仅可能会使web应用无法访问,还会导致web服务器启动报错 WebRoot →Web应用所在 ...
- Sqlserver2008 表分区教程
先声明..Sql2008只有企业版才能够搞这个表分区.其他版本请自觉更改.. 哥在这里费了很长时间劲..结果还是老老实实的重装.. 表分区定义 一般情况下,我们建立数据库表时,表数据都存放在一个文件里 ...
- 缺少索引导致的服务器和MYSQL故障。
故障现象: 网站访问缓慢. 数据库RDS: CPU满,连接数满,其他值都是空闲. apache服务器:CPU正常,IO正常,流量报警,内存爆满. 解决思路: 一.没遇到过此情况,一脸懵逼. 二.请教大 ...
- C语言Hello world
#include"stdio.h" void main() { printf("Hello world!\n"); }