Entity Framewor简单属性映射

栏目: C# · 发布时间: 7年前

内容简介:本节我们只介绍在EF中比较常见的映射默认情况下可以不配置表名,我们的模型名称将会作为数据库的表名。但是大部分项目会要求数据库表名称的规范,例如我们要将模型表的主键我们一般习惯使用

本节我们只介绍在EF中比较常见的映射

零、表名映射

默认情况下可以不配置表名,我们的模型名称将会作为数据库的表名。但是大部分项目会要求数据库表名称的规范,例如我们要将模型 User 在数据库中映射为 Users ,那么我们可以这么做,在派生类上下文中的 OnModelCreating 中进行如下定义:

modelBuilder.Entity<User>().ToTbale("Users");

一、主键映射

表的主键我们一般习惯使用 Id 或者以 Id 结尾的方式来命名,EF默认情况下会将 Id 或以 Id 结尾的属性作为主键,如果两者都存在的话,默认会以 Id 作为主键。但是,还存在如下几种情况:

  1. 设置联合主键;
  2. 主键为 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) ,但是大部分情况下不会使用这个默认的映射。举几个例子来讲解一下怎么来改变这个默认映射。

  1. 字段不可为空
//设置Name属性在数据库映射不可为空
modelBuilder.Entity<User>().Property(p=>p.Name).IsRequired();
  1. 字段可为空
//设置Birthday属性在数据库映射可为空
modelBuilder.Entity<User>().Property(p=>p.Birthday).IsOptional();

四、日期映射

EF中的日期类型在数据库中默认映射为Date,但是数据库中的日期类型还有很多,并且有时候我们需要将日期类型映射为数据库其他类型,那么我们该怎么做呢?这里我们以映射为 DateTime 为例:

modelBuilder.Entity<User>().Property(p=>p.CreateDateTime).HasColumnType("DATETIME");

注:数值类型和日期类型属于值类型,因此我们不需要通过 IsRequired 来配置映射字段不可为空,因为默认就是不为空的。但是可以通过 IsOptional 设置可为空。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。

Ordering Disorder

Ordering Disorder

Khoi Vinh / New Riders Press / 2010-12-03 / USD 29.99

The grid has long been an invaluable tool for creating order out of chaos for designers of all kinds—from city planners to architects to typesetters and graphic artists. In recent years, web designers......一起来看看 《Ordering Disorder》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

SHA 加密
SHA 加密

SHA 加密工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具