Entity Framework 4.1 之五:多对多的关系

原文名称:Entity Framework 4.1: Many to Many Relationships (5)

原文地址:http://vincentlauzon.wordpress.com/2011/04/15/entity-framework-4-1-many-to-many-relationships-5/

看到 Entity Framework 4.1 推荐英文教程,为了帮大家看起来方便一些,简单翻译一下。这是一个系列,共有 8 篇,这是第 5 篇。
 
  1. Entity Framework 4.1 之一 : 基础
  2. Entity Framework 4.1 之二 : 覆盖默认的约定
  3. Entity Framework 4.1 之三 : 贪婪加载和延迟加载
  4. Entity Framework 4.1 之四:复杂类型
  5. Entity Framework 4.1 之五:多对多的关系
  6. Entity Framework 4.1 之六:乐观并发
  7. Entity Framework 4.1 之七:继承
  8. Entity Framework 4.1 之八:绕过 EF 查询映射

这篇文章讨论多对多的关系。

让我们从最简单的例子开始。我们让 EF4.1 来推断表的映射。我在订单和雇员之间建模多对多的关系。

public class Order
{

public
int
OrderID {
get
;
set
; }
[Required]
[StringLength(

32
, MinimumLength
=
2
)]

public
string
OrderTitle {
get
;
set
; }
[Required]
[StringLength(

64
, MinimumLength
=
5
)]

public
string
CustomerName {
get
;
set
; }

public
DateTime TransactionDate {
get
;
set
; }

public
byte
[] TimeStamp {
get
;
set
; }


public
virtual
List
<
OrderDetail
>
OrderDetails {
get
;
set
; }

public
virtual
List
<
Employee
>
InvolvedEmployees {
get
;
set
; }
}


public
class
Employee
{

public
int
EmployeeID {
get
;
set
; }

public
string
EmployeeName {
get
;
set
; }


public
virtual
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。

这样,你可以控制没有直接映射到类的表。

就使用这种模型而言,则是非常简单和自然。

private
static
void
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 帮我们完成了。

参考页面:http://qingqingquege.cnblogs.com/p/5933752.html

IT文库 » Entity Framework 4.1 之五:多对多的关系
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址