EF 6 Code-First系列--EF 6 Code-First中的默认约定

本文详细介绍了EF6Code-First中的默认约定,包括主键、外键、关系、数据类型映射等,并提到默认的一对多关系处理。同时指出一对一和多对多关系需要额外配置,以及复杂类型和重写约定的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

EF 6 Code-First中的默认约定

约定是一组默认规则,在使用Code-First时,这些规则会根据域类自动配置概念模型。正如你在前一章的Code-First示例中看到的,EF API配置了域类中的主键、外键、关系、列数据类型等,而没有任何额外的配置。这是因为EF Code-First约定。如果在域类中遵循它们,那么数据库模式将基于约定进行配置。这些EF 6.x Code-First约定定义在System.Data.Entity.ModelConfiguration.Conventions命名空间中。

下表列出了默认的code first约定:

默认约定描述
Schema(架构)默认情况下,EF将所有DB对象创建到dbo模式中。
Table Name(表名)<实体类名> + ‘s’。EF将创建一个以’s’结尾的实体类名称的DB表,例如Student域类(entity)将映射到Students表。
Primary key Name(主键)(1)、 Id (2)、 <实体类名> + “Id” (不分大小写)。EF将为属性Id或<实体类名> + “Id”(不区分大小写)创建一个主键列。
Foreign key property Name(外键)默认情况下,EF将查找与主体实体主键名称相同的外键属性。如果外键属性不存在,EF将在Db表中创建一个FK列,该列具有<依赖导航属性名称> + “_” + <主体实体主键属性名称>。例如,如果Student实体不包含Grade的外键属性,EF将在Students表中创建Grade_GradeId外键列。
Null column(null 列)EF为所有引用类型属性和可为空的基本属性创建一个空列,例如string, Nullable,Student,Grade (所有类类型属性)
Not Null Column(非空列)EF为主键属性和非空值类型属性创建NotNull 列,例如int, float, decimal, datetime等。
DB Columns order(列顺序)EF将以与实体类中的属性相同的顺序创建DB列。但是,主键列将会被放到第一位。
Properties mapping to DB(映射到DB的属性)默认情况下,所有属性都将映射到数据库。使用[NotMapped]特性从DB映射中排除属性或类。
Cascade delete(级联删除)默认为所有类型的关系启用。

下表列出c#数据类型与SQL Server数据类型的映射关系。

C# 数据类型映射到 SQL Server 的数据类型
intint
stringnvarchar(Max)
decimaldecimal(18,2)
floatreal
byte[]varbinary(Max)
datetimedatetime
boolbit
bytetinyint
shortsmallint
longbigint
doublefloat
charNo mapping
sbyteNo mapping(throws exception)
objectNo mapping

下图说明了与数据库映射的约定。

在这里插入图片描述

关联关系约定

EF 6使用默认约定的导航属性推断一对多关系。

注意:EF 6不包括一对一和多对多关系的默认约定。您需要使用Fluent API或DataAnnotation来配置它们。

复杂类型约定

Code First为不包括key属性的类创建复杂类型,并且没有使用数据注释特性或Fluent API注册主键。

这是对code first约定的概述。可以使用DataAnnotation或Fluent API重写这些约定。

参考

https://www.entityframeworktutorial.net/
https://msdn.microsoft.com/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值