2012-05-09 91 views
0

有沒有人可以告訴我如何首先與實體框架代碼做相應的表映射。 這裏是我的表實體框架4.1與表本身的關係

enter link description here

我已經試過這樣做,但沒有成功。

[Table("Matiere")] 
public class Matiere 
{ 
    [Key] 
    public Int32 Id { get; set; } 
    public Int32? IdParent { get; set; } 
    [Column("NomMatiere")] 
    public String Nom { get; set; } 
    public virtual Matiere Parent { get; set; } 
    public virtual ICollection<Matiere> Childs { get; set; } 
} 

public class MatiereConfiguration : EntityTypeConfiguration<Matiere> 
{ 
    public MatiereConfiguration() 
    { 
     this.HasOptional(m => m.Parent).WithMany(m => m.Childs).HasForeignKey(m => m.IdParent); 
     this.HasOptional(m => m.Childs).WithRequired(); 
    } 
} 

在此先感謝。

回答

0

你很近。我認爲您不需要提供HasOptional(m => m.Childs).WithRequired();

首先,我會將所有的映射信息放入您的MatiereConfiguration中,而不是混合使用DataAnnotations和Fluent映射。這不是必需的,而只是一個建議。

這應該工作:

public class MatiereConfiguration : EntityTypeConfiguration<Matiere> 
    { 
     public MatiereConfiguration() 
     { 
      HasKey(m => m.Id); 
      Property(m => m.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 
      Property(m => m.Nom).HasColumnName("NomMatiere")   
      HasOptional(m => m.Parent).WithMany(m => m.Childs).HasForeignKey(m => m.IdParent); 

     } 
    }