一对一

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

  /// <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. Visual Studio 启动加速

    Who is locking my SQL database?|Deploy a database project with TFS Build Visual Studio 2012 running ...

  2. 使用python/casperjs编写终极爬虫-客户端App的抓取-ZOL技术频道

    使用python/casperjs编写终极爬虫-客户端App的抓取-ZOL技术频道 使用python/casperjs编写终极爬虫-客户端App的抓取

  3. poj 1466 Girls and Boys(二分匹配之最大独立集)

    Description In the second year of the university somebody started a study on the romantic relations ...

  4. Chrome浏览器查看cookie

    原文:http://jingyan.baidu.com/article/6b18230954dbc0ba59e15960.html 1. 查看页面的cookie 方法: a). 点击地址栏前面的文档薄 ...

  5. 【转载自i春秋】图片马合成方法

    1.将图片和一句话木马放在同一个文件夹 2.创建快捷方式,将起始位置修改为图片和txt文本的路径. 3.进行合成,命令如下 copy .png /b + .txt /a .png 4.成功!自行测试. ...

  6. PyInstaller打包Python脚本为exe

    1.PyInstaller-3.1.1  百度云链接  http://pan.baidu.com/s/1jHYWin8 密码  oapl 2.安装最新版本的 pywin32-217.win32-py2 ...

  7. [原创作品]web网页中的锚点

    因为近来在从事web前端开发的工作,所以写的文章也都是关于web这一块.以后将分享算法和web高级编程的内容,很多公司的web前端不够重视,以为是很low-level,给的待遇也很一般,其实,这都是很 ...

  8. ORACLE SEQUENCE 介绍

    在oracle中sequence就是所谓的序列号,每次取的时候它会自己主动添加,一般用在须要按序列号排序的地方.  1.Create Sequence  你首先要有CREATE SEQUENCE或者C ...

  9. Android开发有用的站点

    在github上面找到一个个人认为比較好的站点,好在能够方便下载开发工具.我的AndroidStudio就是在上面下载的.安装了一直在使用.该 网址主要收集整理Android开发所需的Android ...

  10. [RxJS] Wrap up

    Last thing to do is clean the score box and input, also auto foucs on input when click start. const ...