EF关系配置之1:N

  对EntityFramework进行关系配置,既可以在继承自DbContext的类中,通过override的OnModelCreating方法中进行定义,也可以在自定义的Configuration类中使用HasRequired、HasMany等方法进行配置。

但要注意,在对类型-表级别的映射选项进行配置时,只能在OnModelCreating方法中进行定义。如下图为例:

  

  注释中的效果为,若定义的实体类类名为User,则将其与数据库中名为User的表进行关联,若数据库中无名为User的表,则抛出异常。若已按EF默认选项建立数据库,则慎用此语句。

接下来,以User-Role为N:1关系为例,进行数据关系配置。则有以下三种方式:

(一)在UserConfiguration中进行配置

    

  

    其中前几行的意思在基础框架搭建一文中已作说明,此处不是重点。注释部分分别意为:

1)每个User实体中必有一个Role对象

2)每个Role对象对应着多个User,组成其类型为List<User>的Users对象

3)两者之间的映射关系存储于User实体对应数据表中的RoleId字段内

  (二)在RoleConfiguration中进行配置

    

    在此文件中定义则简单许多,注释部分意为:

1)每个Role对应多个User,组成其类型为List<User>的Users对象

2)每个User实体中必对应一个Role对象

3)其后也可加.Map(m=>m.MapKey("字段名"))表示其对应数据表中的字段

  (三)在User类中定义与外键对应的属性

    

  

  在此实体类中定义的RoleId属性会被系统检验时,识别为User实体与Role实体对应的外键的属性,同时数据表中外键对应的字段也将被命名为RoleId。

在外键定义中要注意以下几点:

1.以上三种方法中前两种可以同时使用,只要保证配置中的外键字段名一致均为自定义名称,或均为系统默认名称即可,但第三种方法只能单独使用,否则会在生成数据库过种中抛出异常:

    

  2.使用前两种方法时,若未在配置方法中使用.Map方法确定外键字段名,则系统将默认以[表名_ID]的规则进行命名。

时间: 2024-11-10 13:38:48

EF关系配置之1:N的相关文章

EntityFramework Core2.0 多对多关系配置

? 在EF6.0 中,多对多关系配置时,系统会自动生成第三张表,来将两张有互相约束关系的表联系起来,但是在EF Core2.0中,我们需要手动建立第三张表,比如说有两个模型Passage.cs和Category.cs,若想建立两者之间的多对多关系,我们就需要借助第三张表PassageCategory来实现: public class Passage { //文章编号 [Key] public long PassageId { get; set; } //标题 public string Titl

asp.net core系列 28 EF模型配置(字段,构造函数,拥有实体类型)

原文:asp.net core系列 28 EF模型配置(字段,构造函数,拥有实体类型) 一. 支持字段 EF允许读取或写入字段而不是一个属性.在使用实体类时,用面向对象的封装来限制或增强应用程序代码对数据访问的语义时,这可能很有用.无法使用数据注释配置.除了约定,还可以使用Fluent API为属性配置支持字段. 1.1 约定 public class Blog { // _<camel-cased property name> private string _url; public int

hibernate中多表映射关系配置

1.one-to-many一对多关系的映射配置(在一的一方实体映射文件中配置) <!-- cascade属性:级联操作属性 save-update: 级联保存,保存客户时,级联保存客户关联的联系人 delete:级联删除,删除客户时,级联删除客户关联的联系人 all:级联保存+级联删除 --> <!-- inverse属性:设置是否不维护关联关系 true:不维护关联 false(默认值):维护关联 --> <!-- 一对多 --> <set name="

使用annotation配置hibernate(2):一对多关系配置

数据表结构 单向一对多 Student.java 1 @Entity 2 @Table(name = "student") 3 public class Student { 4 @Id 5 @Column(name = "id") 6 @GenericGenerator(name = "generator",strategy = "native") 7 @GeneratedValue(generator = "gen

使用annotation配置hibernate(3):多对多关系配置

数据库表结构 Student.java 1 @Entity 2 @Table(name = "student") 3 public class Student { 4 @Id 5 @Column(name = "id") 6 @GenericGenerator(name = "generator",strategy = "native") 7 @GeneratedValue(generator = "generato

EF 关系描述

网络上常常看到有ef 1对1 1对多等关系的描述,按照我的理解,其根本就是为了呈现出一个视图,我最近设计了一个ef关系,请大家看一看. 需求描述 在gps车辆信息管理中,有个开户需求,其根本就是三种关系的对应,车辆信息,sim卡信息,以及终端信息,这三个实体是一一对应的,一旦开户,就需要三种信息. 先设计三种关系实体 /// <summary> /// 实体模型抽象类 /// </summary> public abstract class DbSetBase : IDbSetBa

蜗牛—Hibernate之实体关系配置

Hibernate框架很好用,初识的感觉就是,在你配置好的情况下,它可以自动帮你封装实体,也可以自动在你指定的实体内封装另一个实体 下面就来稍微研究一下(以下的字段都必须有set/get方法) 首先看一下我的主要实体类Employee Employee与Department的关系为many-to-one Employee的hbm.xml配置文件如下----- 第一行:name代表的是上图中那个department字段,class不言而喻 第三行:column指的是Employee表中对应的列名

MyBatis_4_一对多关系配置

---5-1 一对多关系配置1-------------------------------------------------------------- message package com.imooc.bean; /** * 与消息表对应的实体类 */ public class Message { /** * 主键 */ private String id; /** * 指令名称 */ private String command; /** * 描述 */ private String d

Hibernate 关系配置

表之间关系 1. 一对多 一个部门有多个员工,一个员工只能属于某一个部门 一个班级有多个学生,一个学生只能属于一个班级 2. 多对多 一个老师教多个学生,一个学生可以被多个老师教 一个学生可以先择多门课程,一门课程可以被多个学生选择 3. 一对一 一个公司只能对应一个注册地址 表之间关系建表原则 1. 一对多 在多的一方创建一个外键,指向一的一方的主键 2. 多对多 创建一个中间表,中间表至少有两个字段,分别作为外键指向多对多双方的主键 3. 一对一 唯一外键对应 主键对应 一对多关系配置 一.