资讯专栏INFORMATION COLUMN

Entity Framewor简单属性映射

seanlook / 781人阅读

摘要:本节我们只介绍在中比较常见的映射零表名映射默认情况下可以不配置表名,我们的模型名称将会作为数据库的表名。举几个例子来讲解一下怎么来改变这个默认映射。

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

零、表名映射

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

modelBuilder.Entity().ToTbale("Users");
一、主键映射

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

设置联合主键;

主键为 int 类型,但是不是自增长的,而是手动分配的。

针对上面两种情况,我们分别进行如下配置:

//设置联合主键
modelBuilder.Entity().HasKey(k => new
{
    Id=k.Id,
    UserId=k.UserId
});

//手动分配主键值
modelBuilder.Entity().HasKey(k => k.Id).Property(p => p.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

DatabaseGeneratedOption 是枚举类型,值如下:

说明
Identity 标识列
Computed 计算列
None 手动分配值
二、数值映射

数据库中的数值类型有很多种,C#中也有很多数值类型,但是我们无法直接将C#中的数值类型转换为数据库中的数值类型。那么怎么将C#数值类型映射为数据库数值类型呢?这里我们以 C# float 为例,来看一下代码:

modelBuilder.Entity().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().Property(p=>p.Money).HasPrecision(18,4);
三、字符串映射

当我们未对string类型的属性配置映射时,默认的数据库类型是 nvarchar(max),但是大部分情况下不会使用这个默认的映射。举几个例子来讲解一下怎么来改变这个默认映射。

字段不可为空

//设置Name属性在数据库映射不可为空
modelBuilder.Entity().Property(p=>p.Name).IsRequired();

字段可为空

//设置Birthday属性在数据库映射可为空
modelBuilder.Entity().Property(p=>p.Birthday).IsOptional();
四、日期映射

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

modelBuilder.Entity().Property(p=>p.CreateDateTime).HasColumnType("DATETIME");
注:数值类型和日期类型属于值类型,因此我们不需要通过 IsRequired 来配置映射字段不可为空,因为默认就是不为空的。但是可以通过 IsOptional 设置可为空。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/61500.html

相关文章

  • Entity Framewor简单属性映射

    摘要:本节我们只介绍在中比较常见的映射零表名映射默认情况下可以不配置表名,我们的模型名称将会作为数据库的表名。举几个例子来讲解一下怎么来改变这个默认映射。 本节我们只介绍在EF中比较常见的映射 零、表名映射 默认情况下可以不配置表名,我们的模型名称将会作为数据库的表名。但是大部分项目会要求数据库表名称的规范,例如我们要将模型 User 在数据库中映射为 Users,那么我们可以这么做,在派生...

    kelvinlee 评论0 收藏0
  • Entity Framework 继承映射

    摘要:一是常用的策略,通过外键来表示继承,父类和子类分别位于不同的表中,子类表包含自身属性列和父类表的外键,并将父表的外键作为子类表的主键。与父类的多态关联将被表示为引用父类表的外键。 继承是面向对象开发时经常用到的,但是SQL Server 数据库不具备继承,那么怎么办能?我们可以利用如下三种方法: TPH(Table per Hierachy):对SQL架构进行非规范化来表示多态,使用...

    宋华 评论0 收藏0
  • Entity Framework 继承映射

    摘要:一是常用的策略,通过外键来表示继承,父类和子类分别位于不同的表中,子类表包含自身属性列和父类表的外键,并将父表的外键作为子类表的主键。与父类的多态关联将被表示为引用父类表的外键。 继承是面向对象开发时经常用到的,但是SQL Server 数据库不具备继承,那么怎么办能?我们可以利用如下三种方法: TPH(Table per Hierachy):对SQL架构进行非规范化来表示多态,使用...

    microelec 评论0 收藏0
  • Entity Framework 约定

    摘要:约定,类似于接口,是一个规范和规则,使用定义约定来配置模型和规则。在这里约定只是记本规则,我们可以通过或者来进一步配置模型。约定的形式有如下几种类型发现约定主键约定关系约定复杂类型约定自定义约定零类型发现约定在中。 约定,类似于接口,是一个规范和规则,使用Code First 定义约定来配置模型和规则。在这里约定只是记本规则,我们可以通过Data Annotaion或者Fluent A...

    PAMPANG 评论0 收藏0
  • Entity Framework 约定

    摘要:约定,类似于接口,是一个规范和规则,使用定义约定来配置模型和规则。在这里约定只是记本规则,我们可以通过或者来进一步配置模型。约定的形式有如下几种类型发现约定主键约定关系约定复杂类型约定自定义约定零类型发现约定在中。 约定,类似于接口,是一个规范和规则,使用Code First 定义约定来配置模型和规则。在这里约定只是记本规则,我们可以通过Data Annotaion或者Fluent A...

    王岩威 评论0 收藏0

发表评论

0条评论

seanlook

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<