我使用实体框架数据库第一,但我想从代码优先模式复制以下行为:实体框架数据库第一:转换关联表到导航属性
在实体框架代码首先,你可以做沿着这些线:
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关于现有表以创建多对多导航属性?
我认为真正的联结表具有更多的属性,而不仅仅是两个外键或一个单独的主键,否则EF不会将它结合到概念模型中。是对的吗? –
除了@GertArnold所说的外键之一是否为空,那么EF数据库首先也将关联的表作为单独的实体包含在内。 – 2013-05-15 01:14:44