这些是我的表:CFFPart,Disp,CFFPartDisp,Expert,CFFpartDispExpert, CFFPartDisp在CFFPart和CF之间有许多关系。 DISP。
ToTable("Discipline", "dbr");
Property(t => t.Id).HasColumnName("DispID");
Property(t => t.Text).HasColumnName("DisPName");
HasMany(t => t.CFFParts).WithMany().Map(m => m.MapLeftKey("DisPID").MapRightKey("CFFPartID").ToTable("CFFPartDisP", "dbr"));
CFFpartDisPExpert在Expert& amp; CFFpartDisP 我如何首先在代码中为此编写映射?
答案 0 :(得分:1)
您必须将CFFPartDisp
公开为模型中的实体类。您不能将其用作CFFPart
和Disp
之间的链接表,并在您的问题中使用Fluent映射。 CFFPart
和Disp
之间的关系不是多对多关系(在严格的EF意义上)。相反,您必须创建两个与CFFPartDisp
作为中间实体的一对多关系。然后,您可以将CFFPartDisp
和Expert
之间的关系作为第三种关系链接到此中间实体。
CFFPartDisp
实体可能如下所示:
public class CFFPartDisp
{
public int ID { get; set; }
public int CFFPartID { get; set; }
public CFFPart CFFPart { get; set; }
public int DispID { get; set; }
public Disp Disp { get; set; }
public ICollection<Expert> Experts { get; set; }
}
CFFPart
和Disp
个实体需要引用CFFPartDisp
的集合:
public class CFFPart
{
public int ID { get; set; }
public ICollection<CFFPartDisp> CFFPartDisps { get; set; }
}
public class Disp
{
public int ID { get; set; }
public ICollection<CFFPartDisp> CFFPartDisps { get; set; }
}
并且Expert
还需要CFFPartDisp
的集合来建立CFFPartDisp
和Expert
之间的多对多关系:
public class Expert
{
public int ID { get; set; }
public ICollection<CFFPartDisp> CFFPartDisps { get; set; }
}
使用这些实体可以创建三种关系:
modelBuilder.Entity<CFFPartDisp>()
.HasRequired(cpd => cpd.CFFPart)
.WithMany(cp => cp.CFFPartDisps)
.HasForeignKey(cpd => cpd.CFFPartID);
modelBuilder.Entity<CFFPartDisp>()
.HasRequired(cpd => cpd.Disp)
.WithMany(cp => cp.CFFPartDisps)
.HasForeignKey(cpd => cpd.DispID);
modelBuilder.Entity<CFFPartDisp>()
.HasMany(cpd => cpd.Experts)
.WithMany(e => e.CFFPartDisps)
.Map(m =>
{
m.MapLeftKey("CFFPartDispID");
m.MapRightKey("ExpertID");
m.ToTable("CFFpartDisPExpert");
});