Entity Framework 4.1 之五:多对多的关系
来源:互联网 发布:杰茜莱旗下品牌js官网 编辑:程序博客网 时间:2024/05/22 18:38
这篇文章讨论多对多的关系。
让我们从最简单的例子开始。我们让 EF4.1 来推断表的映射。我在订单和雇员之间建模多对多的关系。
publicclass Order
{
publicint OrderID {get; set; }
[Required]
[StringLength(32, MinimumLength=2)]
publicstring OrderTitle {get; set; }
[Required]
[StringLength(64, MinimumLength=5)]
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; }
}
{
publicint OrderID {get; set; }
[Required]
[StringLength(32, MinimumLength=2)]
publicstring OrderTitle {get; set; }
[Required]
[StringLength(64, MinimumLength=5)]
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");
});
.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();
}
{
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 之五:多对多的关系
- ADO.NET Entity Framework多对多关系增删查
- Entity Framework多对多关系实践(many-to-many)
- Entity Framework使用建模之Code First 多对多
- Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例
- Entity Framework多对多关联映射的实现
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第六章:管理产品图片——多对多关系(上篇)
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第六章:管理产品图片——多对多关系(上篇)
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第六章:管理产品图片——多对多关系(上篇)
- Entity Framework 学习总结之五:EntityClient
- [C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例
- Entity Framework多表对一实体,一表对多实体的实现
- Entity Framework 实践系列 —— 搞好关系 - 同事之间(多对多,many-to-many)
- linq、lambda、entity framework之间的关系
- Entity Framework Code First (五)Fluent API - 配置关系
- Entity Framework 4.1/4.3 之五 (DBContext 之 2 查询功能)
- Entity Framework 4.1 之二 : 覆盖默认的约定
- Entity Bean (5) : 多对多关系[转]
- Entity Framework 4.1 之一 : 基础
- Entity Framework 4.1 之二 : 覆盖默认的约定
- Entity Framework 4.1 之三 : 贪婪加载和延迟加载
- 最近碰到几个c++问题
- Entity Framework 4.1 之四:复杂类型
- Entity Framework 4.1 之五:多对多的关系
- Entity Framework 4.1 之六:乐观并发
- Entity Framework 4.1 之七:继承
- Entity Framework 4.1 之八:绕过 EF 查询映射
- Entity Framework 4.1 Code First 学习之路
- Entity Framework 4.1 Code-First 学习笔记
- Fluent NHibernate之旅一
- 永远的错误,不理解的结果
- Fluent NHibernate之旅二--Entity Mapping