一对一

就拿后台用户权限相关的实体来说明吧,用户表,用户详细表,是一对一的关系:

  /// <summary>
/// 用户信息类
/// </summary>
public class User
{
public string UserId { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public UserStatus Status { get; set; }
public DateTime CreateTime { get; set; }
//public string UserDetailId { get; set; }
public UserDetail UserDetail { get; set; }
}
重要在于加入导航属性:
public UserDetail UserDetail { get; set; }
再创建一个用户详细实体model
 /// <summary>
/// 用户详细信息类
/// </summary>
public class UserDetail
{
public string UserDetailId { get; set; }
public string Name { get; set; }
public string Age { get; set; }
public int Sex { get; set; }
public User User { get; set; }
}
每一个用户信息,都对应一个用户详细信息表,反之亦然,继承DbContext,重写OnModelCreating方法,进行Flunt API 配置
modelBuilder.Entity<UserDetail>().HasRequired(u => u.User);
这样就可以默认生成外键了,外键名称格式,默认是“主键表表名_外键表表名”,如下图。
 
如果你想自己定义数据库字段名称,可以在实体中,加入导航属性的基础上再加入外键表的ID,EF,默认会认作那个ID为外键属性ID名称,另外一种方法则是,加入一个属性ID, 
然后我们进行flunt配置.  
modelBuilder.Entity<User>().HasRequired(u => u.UserDetail).WithMany().HasForeignKey(u => u.UserDetailId);
数据库生成结果如下:
 
 
一对多
还是拿之前的用户权限来说,这次我们用到的是 用户表,角色表,一个用户只有一个角色,但一个角色却对应多个用户。
添加Role表:
 public class Role
{
public string RoleId { get; set; }
public string RoleName { get; set; }
public List<User> Users { get; set; }
}
用户表,不需要做变动,然后我们对其进行Flunt配置:
modelBuilder.Entity<Role>().HasMany(u => u.Users).WithRequired().Map(u => u.MapKey("RoleId"));
生成的数据库字段如下:

 
多对多
每个角色可以对应多个菜单,每个菜单也可以对应多个角色用于配置,那么就要需要运用到多对多的关系了。
在Role表中加入导航属性
public IList<Menu> Menus { get; set; }
同时添加Menu(菜单)实体
 public class Menu
{
public string MenuId { get; set; }
public string MenuName { get; set; }
public string Order { get; set; }
public bool Enable { get; set; }
public string AbsPath { get; set; } public IList<Role> Roles { get; set; }
}
EF的多对多,最终生成的是一张中间表,我们不需要配置,查看数据库结构
 
可能你对数据库名和字段名称有些介意,没关系,我们可以对其进行配置。
 modelBuilder.Entity<Role>().HasMany(u => u.Menus).WithMany(u => u.Roles).Map(u =>
{
u.MapLeftKey("MenuId"); //设置左表字段名称
u.MapRightKey("RoleId"); //设置右表字段名称
u.ToTable("Role_Menu"); //设置表名称
});
再看看生成的中间表
这下满意了吧。
 
 
 还不太熟悉的,可以下载源码

EF 一对一,一对多,多对多 Flunt API 配置的更多相关文章

  1. JPA级联(一对一 一对多 多对多)注解【实际项目中摘取的】并非自己实际应用

    下面把项目中的用户类中有个:一对一  一对多  多对多的注解对应关系列取出来用于学习      说明:项目运行正常 问题类:一对多.一对一.多对多 ============一对多 一方的设置 @One ...

  2. Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作

    Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作,单表查询,多表查询 一丶表与表之间的关系 背景: ​ ​ ​  ​ ​ 由于如果只使用一张表存储所有的数据,就会操作数 ...

  3. mybatis 一对一 一对多 多对多

    一对一 一对多 多对多

  4. day 69-70 一对一 一对多 多对一联表查询

    day 69 orm操作之表关系,多对多,多对一 多对一/一对多, 多对多{类中的定义方法} day69 1. 昨日内容回顾 1. 单表增删改查 2. 单表查询API 返回QuerySet对象的: 1 ...

  5. JPA 一对一 一对多 多对一 多对多配置

    1 JPA概述 1.1 JPA是什么 JPA (Java Persistence API) Java持久化API.是一套Sun公司 Java官方制定的ORM 方案,是规范,是标准 ,sun公司自己并没 ...

  6. 使用NHibernate(7)-- 一对一 && 一对多 && 多对多

    1, 一对一. 对于数据量比较大的时候,考虑查询的性能,肯能会把一个对象的属性分到两个表中存放:比如用户和用户资料,经常使用的一般是Id和用户名,用户资料(学校,籍贯等)是不经常被查询的,所以就会分成 ...

  7. MySQL一对一:一对多:多对多: 实例!!!!

    学生表和课程表可以多对多 一个学生可以学多门课程 一门课程可以有多个学生: 多对多 *** 一个学生对应一个班级 一个班级对应多个学生: 一对多 *** 一个老师对应多个学生 多个学生对应一个老师:一 ...

  8. 初学者易上手的SSH-hibernate04 一对一 一对多 多对多

    这章我们就来学习下hibernate的关系关联,即一对一(one-to-one),一对多(one-to-many),多对多(many-to-many).这章也将是hibernate的最后一章了,用于初 ...

  9. SQLAlchemy_定义(一对一/一对多/多对多)关系

    目录 Basic Relationship Patterns One To Many One To One Many To Many Basic Relationship Patterns 基本关系模 ...

随机推荐

  1. pfsense 2.2RC版本应用

    为什么要上RC版本呢?因为华硕主板有一个RTL8111G驱动在2.15中还没有识别.... 公司双线WAN,一个PPPOE一个静态IP. 开了端口转发, 要求对不同的IP进行相关限速, 到达指定网站用 ...

  2. Delphi - GetUserNameEx(学一下导出Windows API,以及Array Char充当缓冲区的用法,下标必须从零开始)

    (* * Author : http://www.michael-puff.de * Date : 2006-03-29 * License : PUBLIC DOMAIN *) function G ...

  3. Some General concepts in ISO C

    [ISO C11 Clause 3]对象(object):执行环境中数据存储的一块区域,它的内容可以用来表示值.-注释:对象可以具有特定的类型.--值(value):确定类型的对象的内容的确切含义.- ...

  4. Struts2配置RESULT中TYPE的参数说明

    chain           用来处理Action链,被跳转的action中仍能获取上个页面的值,如request信息.           com.opensymphony.xwork2.Acti ...

  5. scriptol图像处理算法

    神奇的图像处理算法   相似图片搜索是利用数学算法,进行高难度图像处理的一个例子.事实上,图像处理的数学算法,已经发展到令人叹为观止的地步. Scriptol列出了几种神奇的图像处理算法,让我们一起来 ...

  6. 【转】Math.Atan2 方法

    原文网址:https://msdn.microsoft.com/zh-cn/library/system.math.atan2.aspx 返回正切值为两个指定数字的商的角度. 命名空间:  Syste ...

  7. 使IE6同样支持圆角效果

    之前写到过,IE6不支持:hover效果的解决办法,其它这个跟它一样.IE6(7/8)不支持border-radius属性,所以其中的圆角效果显示不出来,可以通过引用ie-css3.htc的方法解决. ...

  8. hdu1978How many ways (记忆化搜索+DFS)

    Problem Description 这是一个简单的生存游戏,你控制一个机器人从一个棋盘的起始点(1,1)走到棋盘的终点(n,m).游戏的规则描述如下: 1.机器人一开始在棋盘的起始点并有起始点所标 ...

  9. MongoDB 的 MapReduce 大数据统计统计挖掘

    MongoDB虽然不像我们常用的mysql,sqlserver,oracle等关系型数据库有group by函数那样方便分组,但是MongoDB要实现分组也有3个办法: * Mongodb三种分组方式 ...

  10. NoSQL 数据库的使用场景

    摘要:对比传统关系型数据库,NoSQL有着更为复杂的分类——键值.面向文档.列存储.图数据库.这里就带你一览NoSQL各种类型的适用场景及一些知名公司的方案选择. 在过去几年,关系型数据库一直是数据持 ...