博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
EF 约定介绍
阅读量:6423 次
发布时间:2019-06-23

本文共 2669 字,大约阅读时间需要 8 分钟。

当前环境为EF Code First开发模式中

一、EF默认约定

1、常用约定

(1)、当没有显示指定实体主键的时候,EF会默认将长得最像Id的属性(且类型为GUID)设为主键

(2)、设计实体时,当一个实体包含一个集合属性,该集合属性里面的元素是另一个实体时,则默认未一对多关系,即使没有显示的指定一对多的关系,EF会默认的设置主外键(主从)关系

(3)、一对一的实体关系,需要手动设置主从关系

(4)、多对多无载荷关系实体,EF自动生成中间表,不需要新增实体来表示.

(5)、表名默认复数化

 

2、类型发现约定(Type Discovery)

使用EF开发,往往是以定义一些模型类开始,定义完这些模型类之后,需要让DbContext知道哪些类型包含在当前模型中,因此,我们需要自定义一个ZdyNameDbContext,并继承DbContext,并在自定义DbContext中暴露需要暴露的类型,这样在Code First开发模式中,就可以使用

context(数据库上下文),使用这些预先暴露的DbSet类型,具体的代码如下:

  public class EFStudyDbContext:DbContext    {        //暴露City的DbSet类型的属性        public DbSet
Citys { get; set; } //暴露Town的DbSet类型的属性 public DbSet
Towns { get; set; } public EFStudyDbContext():base("name=EFStudyConnstrings") {} protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); } }

 

3、主键约定(Primary Key Convention)

当没有显示指定实体主键的时候,EF会默认将长得最像Id的属性(且类型为GUID)设为主键,如果类中的属性(Property)名称为 ID (不区分大小写)或 ClassNameID(类名 + ID),Code First 则推断这个属性为主键。如果主键属性的类型为数字型或 GUID 则会被当成标识列(Identity Column

 

4、关系(外键/导航属性)约定Relationship(Foreign Key/Navigation Properties) Convention

EF中,两个实体间的关系是通过导航属性的方式来实现,每一个对象都能拥有一个它所参与的关系的导航属性,导航属性提供了一种方式在两端来操作这个关系来获取我们需要的数据,可以返回任何一方的引用对象(对象间的关系是1:0或1:1),或者对象的集合(对象间的关系是1:*或*:*),Code First 能够根据导航属性定义的方式来推断实体间的关系.并映射到数据库表中.

除了导航属性规定实体间的关系外,外键属性来式规定实体间方式的一种手段.Code First能够推断以下的命名属性为外键(优先级从上到下):

(1)、导航属性名+关联实体的主键名

(2)、关联实体实体名+关联实体的主键名

(3)、关联实体的主键名

注:

(1)、当外键关系被检测到,Code First会根据外键的可空性来推断关系的具体形式;如果外键属性是可空的,那么关系会被设置为可选的,否则,关系就是必选的.

(2)、当关联实体的外键属性被设置为不为空,Code First会设置级联删除,反之不会。

 

5、复杂类型约定(Complex Types Conventions)

如果Code First无法从类型中推测出主键,也没有通过Data Annotations或者Fluent Api进行注册的主键,那么此类型将会被注册成为复杂类型Complex Type,Complex Types要求类型中不能包含有对其他类型的引用,并且其它类型中也不能包含对本类型的引用的集合.代码如下:

public class Order    {        public Guid Id { get; set; }        public Details Details { get; set; }    }    public class Details    {        public System.DateTime Time { get; set; }        public string Location { get; set; }        public string Num { get; set; }    }

 

6、连接字符串约定(Connection String Conventions)

 

二、移除约定

EF提供了移除默认约定的方法,通过该方法我们可以移除所有定义在System.Data.Entity.ModelConfiguration.Conventions namespace下的约定,例如,移出表名复数约定,代码如下:

public class SchoolEntities : DbContext {      . . .      protected override void OnModelCreating(DbModelBuilder modelBuilder)     {         // Configure Code First to ignore PluralizingTableName convention         // If you keep this convention, the generated tables          // will have pluralized names.         modelBuilder.Conventions.Remove
(); } }

 

三、自定义约定

 

转载于:https://www.cnblogs.com/GreenLeaves/p/7735862.html

你可能感兴趣的文章
mysql source 恢复 sql数据time_zone报错 已解决
查看>>
ubuntu 16.04 安装 Matlab R2016b后启动出现的问题
查看>>
MySQL_PHP学习笔记_2015.04.19_PHP连接数据库
查看>>
关于RFC
查看>>
juery 选择器 选择多个元素
查看>>
【新手向】TensorFlow 安装教程:RK3399上运行谷歌人工智能
查看>>
01-学习前说明
查看>>
Oracle Net Configuration(监听程序和网络服务配置)
查看>>
c语言_判断例子
查看>>
ubuntu重启不清除 /tmp 设置
查看>>
面向对象
查看>>
JSON
查看>>
SAP发布wbservice,如果有权限管控的话,需要给这个webservice加权限
查看>>
16.Python网络爬虫之Scrapy框架(CrawlSpider)
查看>>
stm 常用头文件
查看>>
mac 删除文件夹里所有的.svn文件
查看>>
程序制作 代写程序 软件定制 代写Assignment 网络IT支持服务
查看>>
mysql 案例~select引起的性能问题
查看>>
直接读取图层
查看>>
springsecurity 源码解读 之 RememberMeAuthenticationFilter
查看>>