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方法用于设置数据表的主键。
总结:这一节主要介绍了实体跟数据库表的对应映射。
转载于:https://www.cnblogs.com/duyao/p/4671098.html
Code First02---CodeFirst配置实体与数据库映射的两种方式相关推荐
- SqlServer2008 数据库同步的两种方式(Sql JOB)
数据库同步是一种比较常用的功能.以下结合我自己的体会整理的,如果有理解不完全或者有误的地方望大牛不理赐教.下面介绍的就是数据库同步的两种方式: 1.SQL JOB的方式 sql Job的方式同步数据 ...
- 批量插入数据库语句java_java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码)...
java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码) 发布于 2020-7-22| 复制链接 本文通过实例代码给大家分享了MyBatis批量插入数据到Oracle数据库 ...
- SQL Server 2008 数据库同步的两种方式 (发布、订阅)
参考转载: SQL Server 2008 数据库同步的两种方式 (发布.订阅) 使用Sqlserver事务发布实现数据同步 转载于:https://www.cnblogs.com/YangBinCh ...
- SQL SERVER 2000 数据库备份和SQL Server数据库备份有两种方式,
SQL SERVER 2000 数据库备份与还原时间:2006-08-30 10:23:23 来源:CSDN 作者:佚名备份数据库,例如: BACKUP DATABASE Northwind ...
- 国产化之 .NET Core 操作达梦数据库DM8的两种方式
Python微信订餐小程序课程视频 https://blog.csdn.net/m0_56069948/article/details/122285951 Python实战量化交易理财系统 https ...
- code换取微信openid_微信授权登录开发的两种方式
本文主要针对微信公众号(公众平台的开发) 首先理解一个概念:OAuth: OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表), ...
- Springboot中数据库访问的两种方式之-JdbcTemplate
目录 01.写在前面 02.项目依赖 03.创建模型脚本 04.读取数据库 05.Controller 06.开始测试 本文由bingo创作,授权我原创发布. Tiger和他朋友们的原创技术文章,请关 ...
- Hibernate中自动生成数据库表的两种方式
第一种方式:Hibernate中利用工具类自动生成数据库表 1.建好POJO object, XML Mapping File,配置文件(hibernate.cfg.xml). 2.编写工具类 imp ...
- 数仓知识10:数据库存储的两种方式-行存储和列存储
0. 前言 目前大数据存储主要有两种方案可供选择:行存储(Row-Based)和列存储(Column-Based).业界对两种方案有许多争持,争论的焦点是:谁能够更有效地处理海量数据,且兼顾安全.可靠 ...
最新文章
- Everest 0.6 设置ADSL上网
- 阿里云安装LNMP以及更改网站文件和MySQL数据目录
- Spring 依赖注入(二、注入参数)
- Python入门实战题目
- vue ajax跨域提交,vue-cli开发时ajax跨域的方法
- 计算机原子指令,计算机体系结构——多线程(核)访存“上锁”——原子指令...
- HTML5重要知识点整理
- 用 ASTERISK 搭建自己的免费 VOIP 服务器
- Bootstrap-table固定表头并美化表头
- 在腾讯开发QQ IM 的工作体验
- python爬虫+数据分析之NBA球员LBJ13个赛季的数据分析
- C++学习(四一七)AndroidStudio中的libs和jniLibs
- 乌班图nginx访问php 变成下载
- 中国移动发布物联网操作系统 OneOS
- 电脑c盘格式化,如何恢复C盘文件?
- global在python中啥意思_Python中global用法详解
- 史上最强灌水:奇葩的MEGA 精选 科学网薛宇老师
- c语言浮点数无效,深入C++浮点数无效值定义与判定的解决办法
- 用记账本记录借款、还款管理
- 空心的数字金字塔--C语言
热门文章
- 主题建模lda_使用LDA的Google Play商店应用评论的主题建模
- 动态so库的链接:运行时链接和编译时链接
- 嵌入式开发常用工具软件
- NIOS II软核处理器
- 存款全线下降,贷款大幅增加,你敢等吗?
- 信号分析中一些特征量
- 希望我不会“伤心至死”
- candence 16.6 win8.1 x64 破解
- access建立两个字段唯一索引_数据库索引原理及优化
- linux怎样以root用户运行,如何在Linux机器中以root用户身份运行Elastic...