5

我使用实体框架数据库第一,但我想从代码优先模式复制以下行为:实体框架数据库第一:转换关联表到导航属性

在实体框架代码首先,你可以做沿着这些线:

public class Thing 
{ 
    public int ID { get; set; } 
    ICollection<Stuff> Stuffs { get; set; } 
} 

public class Stuff 
{ 
    public int ID { get; set; } 
    ICollection<Thing> Things { get; set; } 
} 

而数据库将生成和关联表来表示多对多的关系。

我使用数据库优先与遗留数据库。我拉入了实体,它包含了表示我们两个表之间的多对多关系的关联表。

由于关联表被包括作为一个实体,所述导航属性是这样:

public class Thing 
{ 
    public int ID { get; set; } 
    public ICollection<ThingStuff> ThingStuffs { get; set; } 
} 

public class ThingStuff 
{ 
    public int ThingID { get; set; } 
    public int StuffID { get; set; } 
    ICollection<Thing> Things { get; set; } 
    ICollection<Stuff> Stuffs { get; set; } 
} 

public class Stuff 
{ 
    public int ID { get; set; } 
    public ICollection<ThingStuff> ThingStuffs { get; set; } 
} 

所以导航,我必须:

var stuff = Thing.ThingStuffs.Select(ts => ts.Stuff); 

代替:

var stuff = Thing.Stuffs; 

所以问题是:

是否有任何方法可以删除表示关联的实体(ThingStuff)并告诉EntityFramework关于现有表以创建多对多导航属性?

+1

我认为真正的联结表具有更多的属性,而不仅仅是两个外键或一个单独的主键,否则EF不会将它结合到概念模型中。是对的吗? –

+0

除了@GertArnold所说的外键之一是否为空,那么EF数据库首先也将关联的表作为单独的实体包含在内。 – 2013-05-15 01:14:44

回答