0

我有2個實體,一個擁有研究集合的Patient。使用Entity Framework 5實體映射實體代碼

public class Patient 
{ 
    public Guid Id { get; set; } 
    public string Name { get; set; } 
    public List<Study> Studies { get; set; } 
} 

public class Study 
{ 
    public Guid Id { get; set; } 
    public Guid PatientId { get; set; } 
    public string Name { get; set; } 
} 

我想這個對象2個表映射到數據庫「患者」和「研究」。 爲什麼要這樣做語法? 我正在使用「EntityTypeConfiguration」。

class PatientEntityTypeConfiguration : EntityTypeConfiguration<Patient> 
{ 
    public PatientEntityTypeConfiguration() 
    { 
     this.HasKey(p => p.Id); 

     this.Property(p => p.Name) 
      .HasMaxLength(50) 
      .IsRequired(); 

     //TODO: Map the studies!!! 

     this.ToTable("Patients"); 
    } 
} 
+2

看到這裏http://stackoverflow.com/questions/4389265/entity-framework-code-first-map-class-with-list-of-another -class-to-multiple或http://weblogs.asp.net/manavi/archive/2011/05/17/associations-in-ef-4-1-code-first-part-6-many-valued-associations的.aspx – GeorgesD

回答

2

首先,你不應該手動創建表的複數形式,除非你專門用自己實現的PluralizationService

關閉這個功能我會更新模型中的一個位:

public class Study 
{ 
    public Guid Id { get; set; } 
    public virtual Guid PatientId { get; set; } 
    //Add the navigation for Patient 
    public virtual Patient Patient {get;set;} 
    public string Name { get; set; } 
} 

您的映射將如下所示。通過使虛擬的屬性,你允許延遲加載:

class PatientEntityTypeConfiguration : EntityTypeConfiguration<Patient> 
{ 
    public PatientEntityTypeConfiguration() 
    { 
     HasKey(p => p.Id); 

     Property(p => p.Name) 
      .HasMaxLength(50) 
      .IsRequired(); 

     HasMany(p => p.Studies) 
     .WithRequired(s => s.Patient) 
     .HasForeignKey(s => s.PatientId).WillCascadeOnDelete(false); 


    } 
}