使用3列主键连接多对多表

时间:2016-11-04 21:11:12

标签: c# entity-framework ef-code-first many-to-many

我想使用代码优先和流畅的API基于3个实体创建3个表。我正在使用Entity Framework版本6.连接表需要一个3列主键和其他列。

我的问题:如何使用C#Fluent API代码优先创建/映射'\\shared_files\GMO-M0960\GMO-M0960_01.pdf'表的3列主键?谢谢。

联接表 {PatentId,TreatmentId,TreatmentDate} 的3列主键的详细信息。 PatientTreatmentPatentId的值是从其他2个实体(表)中获取的,而TreatmentId的值是手动输入的(例如C#代码或T-SQL脚本,如调用{{1}功能)。

3个实体的详细信息:

TreatmentDate

和连接表(实体)

getdate()

2 个答案:

答案 0 :(得分:1)

您不能将此模型化为隐藏PatientTreatment类的多对多关联,这在实体框架映射中通常称为多对多。

但是你并不打算这样做,正如你所展示的显式PatientTreatment类所显示的那样。所以这只是正确建模的问题。

OnModelCreating子类的DbContext覆盖中,设置映射如下:

protected override void OnModelCreating(DbModelBuilder mb)
{
    mb.Entity<PatientTreatment>()
      .HasKey(x => new { x.PatientId, x.TreatmentId, x.TreatmentDate });
    mb.Entity<Patient>().HasMany(p => p.PatientTreatments)
      .WithRequired().HasForeignKey(x => x.PatientId);
    mb.Entity<Treatment>().HasMany(t => t.PatientTreatments)
      .WithRequired().HasForeignKey(x => x.TreatmentId);

    base.OnModelCreating(mb);
}

我认为这一行HasKey(x => new { x.PatientId, x.TreatmentId, x.TreatmentDate })主要是您正在寻找的。

答案 1 :(得分:0)

我只是在stackoverflow中发送它

  

无法与a创建多对多关系   定制连接表。在多对多关系中,EF管理着   在内部连接表并隐藏。它是没有Entity类的表   在你的模型中。使用附加的这种连接表   您必须创建两个一对多的属性   关系   检查此many to many with extra column