【EF Code First】 一对多、多对多的多重关系配置
这里使用用户表(User)和项目(Project)表做示例
有这样一个需求:
用户与项目的关系是:一个用户可以发多个项目,可以参加多个项目,而项目可以有多个参与成员和一个发布者
[其中含1-n和n-n的关系]
1-n:一个用户可以发布多个项目
n-n:一个项目的参与用户可以多个,一个用户可以参与多个项目
所以在写映射关系的代码时需要注意指定属性之间的关系
项目结构:

实体类结构设计如下
/// <summary>
/// 用户
/// </summary>
public class User
{
public int ID { get;set;} public string NickName { get; set; } public DateTime RegisterTime { get; set; } /// <summary>
/// 参与的项目列表
/// </summary>
public ICollection<Project> Projects { get; set; }
}
/// <summary>
/// 项目
/// </summary>
public class Project
{
public int ID { get; set; } public string Title { get; set; } public string Description { get; set; } /// <summary>
/// 项目发布者
/// </summary>
public virtual User Founder { get; set; } /// <summary>
/// 参与成员
/// </summary>
public virtual ICollection<User> Member { get; set; } }
然后,新建一个映射类 UserMap
public class UserMap : EntityTypeConfiguration<User>
{
public UserMap() { //定义用户与项目之间的多对多关系
this.HasMany<Project>(u => u.Projects).WithMany(p=>p.Member);
}
}
EF里的实体关系配置分为Has和With系列的方法:Optional 可选的、Required 必须的、Many 多个
EF上下文中
public class DB:DbContext
{
public DB() : base("DefaultConnection") { } public DbSet<User> User { get; set; }
public DbSet<Project> Project { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();//移除复数表名的契约 // base.OnModelCreating(modelBuilder);
modelBuilder.Configurations.Add(new UserMap());
}
}
class Program
{
static void Main(string[] args)
{
DB db = new DB();
db.User.ToList();
Console.ReadKey();
}
}
运行后,表结构

下一节:【EF Code First】 一对一、一对多的多重关系配置
【EF Code First】 一对多、多对多的多重关系配置的更多相关文章
- EF Code First 一对多、多对多关联,如何加载子集合?
应用场景 先简单描述一下标题的意思:使用 EF Code First 映射配置 Entity 之间的关系,可能是一对多关系,也可能是多对多关系,那如何加载 Entity 下关联的 ICollectio ...
- EF Code First教程-02.1 Fluent API约定配置
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...
- EF Code First一对一、一对多、多对多关联关系配置
1.EF Code First一对一关联关系 项目结构图: 实体类: Account.cs using System; using System.Collections.Generic; using ...
- 【EF Code First】 一对一、一对多的多重关系配置
这里使用相册Album和图片Picture的关系做示例 1,Album与Picture最基本的关系是1-n(一个相册可以有多张图片) 这时Album.Picture实体类可以这么定义 /// < ...
- EF里一对一、一对多、多对多关系的配置和级联删除
本章节开始了解EF的各种关系.如果你对EF里实体间的各种关系还不是很熟悉,可以看看我的思路,能帮你更快的理解. I.实体间一对一的关系 添加一个PersonPhoto类,表示用户照片类 /// < ...
- EF——一对一、一对多、多对多关系的配置和级联删除 04(转)
EF里一对一.一对多.多对多关系的配置和级联删除 本章节开始了解EF的各种关系.如果你对EF里实体间的各种关系还不是很熟悉,可以看看我的思路,能帮你更快的理解. I.实体间一对一的关系 添加一个P ...
- 【极力分享】[C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例【转载自https://segmentfault.com/a/1190000004152660】
[C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例 本文我们来学习一下在Entity Framework中使用Cont ...
- EF Code First学习系列
EF Model First在实际工作中基本用不到,前段时间学了一下,大概的了解一下.现在开始学习Code First这种方式.这也是在实际工作中用到最多的方式. 下面先给出一些目录: 1.什么是Co ...
- EF和MVC系列文章导航:EF Code First、DbContext、MVC
对于之前一直使用webForm服务器控件.手写ado.net操作数据库的同学,突然来了EF和MVC,好多新概念泉涌而出,的确犹如当头一棒不知所措.本系列文章可以帮助新手入门并熟练使用EF和MVC,有了 ...
随机推荐
- 使用POI导入Excel异常Cannot get a text value from a numeric cell 解决
POI操作Excel时因为Excel数据Cell有不同的类型,会出现Cannot get a text value from a numeric cell的异常错误. 异常原因:Excel数据Cell ...
- 学习练习 java20160507作业
第一题 求水仙花的个数: //求水仙花数 int zongshu = 0; for(int i =100; i<=999;i++) { int bai = i/100; //求百位上面的数字 i ...
- noip2009 潜伏者
P1071 潜伏者 827通过 2.2K提交 题目提供者洛谷OnlineJudge 标签字符串模拟2009NOIp提高组 难度普及/提高- 提交该题 讨论 题解 记录 题目描述 R 国和 S 国正 ...
- 关于BitmapFactory解析流的问题a
今天碰到了一个超级恶心的问题,BitmapFactory.decodeStream(bis,null,options)一直是返回NULL 问题是这样子的: InputStream is= respon ...
- 【WCF 1】WCF框架宏观了解
导读:使用WCF框架爱开发项目也有很长一段时间了,最开始的时候,是理解的不深,所以不写博客进行总结.后来是项目赶,发现需要总结的有很多,一直没有把WCF排上日程,尤其是最近研究EF这一块,更是研究了一 ...
- 004远程登录Linux系统
通过windows主机远程登录Linux主机 前提一:从windows能ping通Linux 前提二:关闭Linux防火墙,运行命令:/etc/init.d/iptables stop (1)使用Pu ...
- jQuery层级元素选择器
第一个: 1:空格表示所有 2:> 第一层 3:+/- 同级 +:之后的第一个元素 -:之后所有同级 d 代码示例: <!DOCTYPE html PUBLIC "-//W3C/ ...
- iConvert Icons 图标转换生成利器,支持Windows, Mac OS X, Linux, iOS,和Android等系统
这是一款在线图标转换工具,生成的图标支持Windows, Mac OS X, Linux, iOS, 和 Android等主流系统. 可以上传图标文件转化成另一个平台下的图标文件,例如将windows ...
- css的#和.的区别
css的#和.的区别, css的#和.的区别 2009-03-04 14:43fyws 分类:Html/Css | 浏览 1911 次 css的#和.的区别如:#home #h3 { padding ...
- linux中的audit审计日志
这里首先介绍auditctl的应用,具体使用指南查看man auditctl.auditctl的man 描述说明这个工具主要是用来控制audit系统行为,获取audit系统状态,添加或者删除audit ...