一个人如何用EF v6.2中的值映射一个联结表?
假设您有一个名为“ Item1”,“ Item2”的实体,并且它们的另一个实体已映射:
public class Item1
{
[Key]
public long Id { get; set; }
public virtual ICollection<MapItem> { get; set; }
}
public class Item2
{
[Key]
public int Id { get; set; }
public virtual ICollection<MapItem> { get; set; }
}
public class MapItem
{
public long Item1ID {get; set;} //PK, FK
public int Item2ID {get; set;} //PK, FK
public decimal Value {get; set;}
public string Name {get; set;}
public virtual Item1 {get; set;}
public virtual Item2 {get; set;}
}
EDMX自动生成此代码,但是我将如何使用代码优先/ FluentAPI生成此代码以构建MapItem
实体的可访问集合?
我尝试更新映射的实体,以在[Key(Order = 1)]
的PK和FK值上使用[Key(Order = 2)]
和MapItem
。
考虑到这不是一个由2个实体组成的真正联结表,但它也具有价值,这似乎是一种奇怪的情况。
答案 0 :(得分:0)
在这里,我可以使用FluentAPI来解决它。
在这里我修改了实体类:
public class MapItem
{
[Key(Order = 1)]
public long Item1ID {get; set;} //PK, FK
[Key(Order = 2)]
public int Item2ID {get; set;} //PK, FK
public decimal Value {get; set;}
public string Name {get; set;}
public virtual Item1 {get; set;}
public virtual Item2 {get; set;}
}
然后在关系生成器中:
modelBuilder.Entity<MapItem>().HasKey(q => new
{
q.Item1ID, q.Item2ID
});
modelBuilder.Entity<MapItem>().HasRequired(q => q.Item1).WithMany(q => q.MapItem).HasForeignKey(q => q.Item1ID);
modelBuilder.Entity<MapItem>().HasRequired(q => q.Item2).WithMany(q => q.MapItem).HasForeignKey(q => q.Item2ID);
关键部分是正确映射实体的“ HasKey”方法。