我想使用代码优先和流畅的API基于3个实体创建3个表。我正在使用Entity Framework版本6.连接表需要一个3列主键和其他列。
我的问题:如何使用C#Fluent API代码优先创建/映射'\\shared_files\GMO-M0960\GMO-M0960_01.pdf'
表的3列主键?谢谢。
联接表 {PatentId,TreatmentId,TreatmentDate} 的3列主键的详细信息。 PatientTreatment
和PatentId
的值是从其他2个实体(表)中获取的,而TreatmentId
的值是手动输入的(例如C#代码或T-SQL脚本,如调用{{1}功能)。
3个实体的详细信息:
TreatmentDate
和连接表(实体)
getdate()
答案 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 })
主要是您正在寻找的。 p>
答案 1 :(得分:0)
我只是在stackoverflow中发送它
无法与a创建多对多关系 定制连接表。在多对多关系中,EF管理着 在内部连接表并隐藏。它是没有Entity类的表 在你的模型中。使用附加的这种连接表 您必须创建两个一对多的属性 关系 检查此many to many with extra column