Entity Framework 4.1:多对多的关系
这篇文章讨论多对多的关系。
让我们从最简单的例子开始。我们让 EF4.1 来推断表的映射。我在订单和雇员之间建模多对多的关系。
publicclass Order
{
publicint OrderID { get; set; }
[Required]
[StringLength(, MinimumLength =)]
publicstring OrderTitle { get; set; }
[Required]
[StringLength(, MinimumLength=)]
publicstring CustomerName { get; set; }
public DateTime TransactionDate { get; set; }
publicbyte[] TimeStamp { get; set; } publicvirtual List<OrderDetail> OrderDetails { get; set; }
publicvirtual List<Employee> InvolvedEmployees { get; set; }
} publicclass Employee
{
publicint EmployeeID { get; set; }
publicstring EmployeeName { get; set; } publicvirtual List<Order> Orders { get; set; }
}
我简单地在订单表中加入一个雇员的列表,在雇员表中加入了一个订单的列表。瞧,这是映射到的表。

现在,我们要控制两件事:
- 关联表的名字
- 在关联表中的两个列名
通过下面的代码可以实现:
modelBuilder.Entity<Employee>()
.HasMany(e => e.Orders)
.WithMany(e => e.InvolvedEmployees)
.Map(m =>
{
m.ToTable("EmployeeOrder");
m.MapLeftKey("EmployeeID");
m.MapRightKey("OrderID");
});
基本上,我们说一个雇员管理多个订单,每个订单涉及多个雇员,因此,我们有了多对多的关系。我们的关联表名为 EmployeeOrder ,左键 (从雇员的角度看,是雇员键) 名为 employee-id,右键名为 order-id。

这样,你可以控制没有直接映射到类的表。
就使用这种模型而言,则是非常简单和自然。
privatestaticvoid ManyToMany()
{
using (var context =new MyDomainContext())
{
var order =new Order
{
OrderTitle ="Pens",
CustomerName ="Mcdo’s",
TransactionDate = DateTime.Now,
InvolvedEmployees =new List<Employee>()
};
var employee1 =new Employee { EmployeeName ="Joe", Orders =new List<Order>() };
var employee2 =new Employee { EmployeeName ="Black", Orders =new List<Order>() }; context.Orders.Add(order); order.InvolvedEmployees.Add(employee1);
order.InvolvedEmployees.Add(employee2); context.SaveChanges();
}
在这个例子中,我甚至都没有在数据上下文中将雇员加入到雇员的集合中,因为他们被引用到订单的集合中,EF 帮我们完成了。
Entity Framework 4.1:多对多的关系的更多相关文章
- Entity Framework Code First主外键关系映射约定
本篇随笔目录: 1.外键列名默认约定 2.一对多关系 3.一对一关系 4.多对多关系 5.一对多自反关系 6.多对多自反关系 在关系数据库中,不同表之间往往不是全部都单独存在,而是相互存在关联的.两个 ...
- Working with Data » Getting started with ASP.NET Core and Entity Framework Core using Visual Studio » 更新关系数据
Updating related data¶ 7 of 7 people found this helpful The Contoso University sample web applicatio ...
- Working with Data » Getting started with ASP.NET Core and Entity Framework Core using Visual Studio » 读取关系数据
Reading related data¶ 9 of 9 people found this helpful The Contoso University sample web application ...
- Entity Framework with MySQL 学习笔记一(关系)
这一篇说说 EF Fluent API 和 DataAnnotations 参考 : http://msdn.microsoft.com/en-us/data/jj591617.aspx http:/ ...
- Entity Framework 实体间的外键关系
EF 默认是开户级联删除的,这此规则将会删除非空外键和多对多的关系,如果 在数据库上下文中的实体模型类 存在着 级联引用和多重删除路径,那么EF就抛出 级联引用和多重删除路径的异常. Introduc ...
- Entity Framework with MySQL 学习笔记一(关系整理版)
1-1 设置 //DataAnnotation 1-1 | 1-0 table //SQLtable : member , columns : memberId, name //SQL basic l ...
- 初试 Entity Framework Core 的多对多映射
今天在博问中看到一个关于 EF Core 的提问 ef core 2.0 多对多查询的问题,由于还没使用过 EF Core 的多对多映射,于是参考 EF Core 帮助文档快速写了个 .net cor ...
- 【极力分享】[C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例【转载自https://segmentfault.com/a/1190000004152660】
[C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例 本文我们来学习一下在Entity Framework中使用Cont ...
- [C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例
本文我们来学习一下在Entity Framework中使用Context删除多对多关系的实体是如何来实现的.我们将以一个具体的控制台小实例来了解和学习整个实现Entity Framework 多对多关 ...
- Entity Framework Code First关系映射约定
本篇随笔目录: 1.外键列名默认约定 2.一对多关系 3.一对一关系 4.多对多关系 5.一对多自反关系 6.多对多自反关系 在关系数据库中,不同表之间往往不是全部都单独存在,而是相互存在关联的.两个 ...
随机推荐
- vue element-ui Tabs 标签页实现【更多】功能
element-ui Tabs本身是没有更多功能的,如果在外边添加一个更多按钮,又非常不好看, 而利用API中Tabs Attributes的before-leave勾子方法可以实现这个功能, 简单P ...
- python第三方库安装-多种方式
第一种方式:安装whl文件 pip install whatever.whl 第二种方式:安装tar.gz文件 一般是先解压,然后进入目录之后,有setup.py文件 通过命令 python se ...
- 2016集训测试赛(二十六)Problem A: bar
Solution 首先审清题意, 这里要求的是子串而不是子序列... 我们考虑用1表示p, -1表示j. 用sum[i]表示字符串前\(i\)的前缀和. 则我们考虑一个字符串\([L, R]\)有什么 ...
- 更改VS2010 工程名的方法
哇~~~~~~~啦啦啦~~~~~~~~ 太开心了,通过不断的尝试,我终于知道怎么更改VS2010的工程名了!!! 下面分享给大家: 1.打开自己想要更改名字的工程,用ctrl+h在整个项目中把想更改的 ...
- 228. 汇总区间(leetcode)
#整体思路:使用堆栈,在Python中可以使用列表代替:如果a[i]-a[i-1]==1,就要将a[i]合并到之前的区间里,#所以我们队首位元素开辟一个区间为[a[0],a[0]]#做最后汇总时候,如 ...
- Andriod 自动化测试研究方向
前言 孔子曰:"工欲善其事,必先利其器",我来云:"工欲利其器,必先知其理".我们无论学习任何新事物,都要尽量做到"知其然知其所以然",对于 ...
- ThinkPHP 3.1、3.2一个通用的漏洞分析
Author:m3d1t10n 前两天看到phithon大大在乌云发的关于ThinkPHP的漏洞,想看看是什么原因造成的.可惜还没有公开,于是就自己回来分析了一下. 0x00官方补丁(DB.class ...
- [转载]使用RoboCopy 命令
经常进行文件管理操作的朋友们,不满意于Windows系统内置的复制功能,因为它太龟速了.于是大家就使用FastCopy.TeraCopy之类的软件来加速复制,但是你是否知道Windows 7已经内置快 ...
- 【MVC2】发布到IIS7.5上后Session为null
MVC2代码「Session.IsNewSession」在VS中可以正常执行,发布到IIS7.5上之后Session为null导致出错. if (Session.IsNewSession) { ... ...
- poj1270Following Orders(拓扑排序+dfs回溯)
题目链接: 啊哈哈.点我点我 题意是: 第一列给出全部的字母数,第二列给出一些先后顺序. 然后按字典序最小的方式输出全部的可能性.. . 思路: 整体来说是拓扑排序.可是又非常多细节要考虑.首先要按字 ...