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查询.前者应用较为广发,后者也只是调用封装好的接口. 现在有一个问题,就是实现多表连接查询,且查询结果集不与任何一个实体类对应,怎么 ...
随机推荐
- Mysql学习笔记(三)对表数据的增删改查。
正文内容. 这一部分是最简单的,也是最麻烦的.简单是因为其实只包括增删该插四个部分.大体上看,增加数据.删除数据.修改数据.查询数据都不麻烦啊,我们日常都是常用的.这个谁不会呢?以前在培训机构学mys ...
- 捉襟见肘之UIView中contentMode属性
UIView.h @property(nonatomic) UIViewContentMode contentMode; // default is UIViewContentModeScaleToF ...
- Ubuntu修改mysql默认编码的方法
ubuntu使用apt-get安装mysql后,server的默认编码是latin1,下面把server的编码修改成utf8. 编码相关信息: 1 2 3 4 5 6 7 8 9 10 11 12 1 ...
- hibernate----(Hql)查询
package com.etc.test; import java.util.List;import java.util.Properties; import org.hibernate.Query; ...
- PHP中“简单工厂模式”实例讲解
原创文章,转载请注明出处:http://www.cnblogs.com/hongfei/archive/2012/07/07/2580776.html 简单工厂模式:①抽象基类:类中定义抽象一些方法, ...
- [转载]将别人的项目或JAVA文件导入到自己的Eclipse中时,常常会出现JAVA文件的中文注释变成乱码的情况,解决办法
eclipse 代码中文注释乱码 求解决 将别人的项目或JAVA文件导入到自己的Eclipse中时,常常会出现JAVA文件的中文注释变成乱码的情况,主要原因就是别人的IDE编码格式和自己的Eclips ...
- Nginx下配置ThinkPHP的URL Rewrite模式和pathinfo模式支持
前面有关于lnmp环境的搭建,在此就不在赘述.下面就简述thinkPHP如何在nginx下开启url_rewrite和pathinfo模式支持 主要有两个步骤: 一.更改php.ini将;cgi.fi ...
- Redis+Spring缓存实例
转自:小宝鸽 一.Redis了解 1.1.Redis介绍: redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).lis ...
- Runner站立会议02
开会时间:21.10~21.30 地点:二教103 今天做了什么:学习五大布局的使用方法 明天准备做什么:学习数据的存储 遇到的困难:知识点太多,信心受挫 站立会议图: 燃尽图:
- 使用github和hexo搭建博客
title: How to build your blog by Hexo in github Welcome to huihuang's blog,you will find what you ex ...