内容简介:本节我们只介绍在EF中比较常见的映射默认情况下可以不配置表名,我们的模型名称将会作为数据库的表名。但是大部分项目会要求数据库表名称的规范,例如我们要将模型表的主键我们一般习惯使用
本节我们只介绍在EF中比较常见的映射
零、表名映射
默认情况下可以不配置表名,我们的模型名称将会作为数据库的表名。但是大部分项目会要求数据库表名称的规范,例如我们要将模型 User 在数据库中映射为 Users ,那么我们可以这么做,在派生类上下文中的 OnModelCreating 中进行如下定义:
modelBuilder.Entity<User>().ToTbale("Users");
一、主键映射
表的主键我们一般习惯使用 Id 或者以 Id 结尾的方式来命名,EF默认情况下会将 Id 或以 Id 结尾的属性作为主键,如果两者都存在的话,默认会以 Id 作为主键。但是,还存在如下几种情况:
- 设置联合主键;
- 主键为 int 类型,但是不是自增长的,而是手动分配的。
针对上面两种情况,我们分别进行如下配置:
//设置联合主键
modelBuilder.Entity<User>().HasKey(k => new
{
Id=k.Id,
UserId=k.UserId
});
//手动分配主键值
modelBuilder.Entity<User>().HasKey(k => k.Id).Property(p => p.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
DatabaseGeneratedOption 是枚举类型,值如下:
| 值 | 说明 |
|---|---|
| Identity | 标识列 |
| Computed | 计算列 |
| None | 手动分配值 |
二、数值映射
数据库中的数值类型有很多种,C#中也有很多数值类型,但是我们无法直接将C#中的数值类型转换为数据库中的数值类型。那么怎么将C#数值类型映射为数据库数值类型呢?这里我们以 C# float 为例,来看一下代码:
modelBuilder.Entity<User>().Property(p=>p.Float);
通过上面的代码,我们将 C# float 类型映射为了数据库的 real 类型。下表是C#数值类型对应的数据库的数值类型:
| C#数值类型 | 数据库数值类型 |
|---|---|
| int | int |
| double | float |
| float | real |
| decimal | decimal(18,2) |
| Int64 | bigint |
我们看到上表中有一个C#数值类型 decimal 对应的数据库数值类型是 decimal(18,2) ,括号中的2代表小数点后保留2位,但是在一些情况下我们需要保留小数点后面N位,这时我们可以这么做:
modelBuilder.Entity<User>().Property(p=>p.Money).HasPrecision(18,4);
三、字符串映射
当我们未对string类型的属性配置映射时,默认的数据库类型是 nvarchar(max) ,但是大部分情况下不会使用这个默认的映射。举几个例子来讲解一下怎么来改变这个默认映射。
- 字段不可为空
//设置Name属性在数据库映射不可为空 modelBuilder.Entity<User>().Property(p=>p.Name).IsRequired();
- 字段可为空
//设置Birthday属性在数据库映射可为空 modelBuilder.Entity<User>().Property(p=>p.Birthday).IsOptional();
四、日期映射
EF中的日期类型在数据库中默认映射为Date,但是数据库中的日期类型还有很多,并且有时候我们需要将日期类型映射为数据库其他类型,那么我们该怎么做呢?这里我们以映射为 DateTime 为例:
modelBuilder.Entity<User>().Property(p=>p.CreateDateTime).HasColumnType("DATETIME");
注:数值类型和日期类型属于值类型,因此我们不需要通过 IsRequired 来配置映射字段不可为空,因为默认就是不为空的。但是可以通过 IsOptional 设置可为空。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- c# – 如何序列化NHibernate映射对象的所有属性?
- MyBatis从入门到精通(十一):MyBatis高级结果映射之一对多映射
- MyBatis从入门到精通(九):MyBatis高级结果映射之一对一映射
- 【mybatis xml】数据层框架应用--Mybatis(三)关系映射之一对一关系映射
- Hibernate 关系映射整理
- SpringMVC——请求映射
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
算法的陷阱
阿里尔•扎拉奇 (Ariel Ezrachi)、莫里斯•E. 斯图克 (Maurice E. Stucke) / 余潇 / 中信出版社 / 2018-5-1 / CNY 69.00
互联网的存在令追求物美价廉的消费者与来自世界各地的商品只有轻点几下鼠标的距离。这诚然是一个伟大的科技进步,但却也是一个发人深思的商业现象。本书中,作者扎拉奇与斯图克将引领我们对由应用程序支持的互联网商务做出更深入的检视。虽然从表面上看来,消费者确是互联网商务兴盛繁荣过程中的获益者,可精妙的算法与数据运算同样也改变了市场竞争的本质,并且这种改变也非总能带来积极意义。 首当其冲地,危机潜伏于计算......一起来看看 《算法的陷阱》 这本书的介绍吧!