我想建立这样的关系(一个区域在 x 个其他区域的附近)
public class Zone
{
public string Id { get; set; }
public string Name { get; set; }
public virtual ICollection<ZoneNeighourhood> ZoneNeighourhoods { get; set; }
}
public class ZoneNeighbourhood
{
public virtual Zone Zone1 { get; set; }
public virtual Zone Zone2 { get; set; }
}
不幸的是,这行不通,因为 EF 生成的 FK 不正确......我怎样才能让这样的结构工作?
具有 3 个区域的示例:区域 1、区域 2、区域 3
1区邻居:
2区,
3区
2区邻居:
1区
3区邻居:
1区
有什么建议吗?
最佳答案
您的映射不正确。您正在创建自引用实体,因此您需要单独的传入和传出关系集合。单一收藏是不够的。
public class Zone
{
public string Id { get; set; }
public string Name { get; set; }
[InverseProperty("NeighbourOf")]
public virtual ICollection<Zone> NeighbourTo { get; set; }
[InverseProperty("NeighbourTo")]
public virtual ICollection<Zone> NeighbourOf { get; set; }
}
您不需要映射连接表,除非您还想向关系添加一些附加属性。
如果您只想要单个集合,则必须使用 fluent 映射:
public class Zone
{
public string Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Zone> Neighours { get; set; }
}
public class Context : DbContext
{
public DbSet<Zone> Zones { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Zone>()
.HasMany(z => z.Neighbours)
.WithMany();
}
}
关于c# - Entity Framework 4.1 - 代码优先 : many-to-many relationship,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5802072/