【发布时间】:2026-01-13 13:40:01
【问题描述】:
我使用的是实体框架数据库优先,但我想从 Code First 范例中复制以下行为:
在 Entity Framework Code First 中,您可以执行以下操作:
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; }
}
并且数据库会生成关联表来表示多对多关系。
我将 Database First 与旧数据库一起使用。我拉入实体,它包括表示我们两个表之间的多对多关系的关联表。
由于关联表是作为实体包含的,因此导航属性如下:
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 数据库首先还将关联表作为单独的实体包含在内。
标签: entity-framework entity-framework-5 .net-4.5 ef-database-first database-first