2011-01-06 14 views
3

これは本当に簡単ですが、私は自分の髪を引き裂いています。ここで(その部分は親部品に含まれることができ、機械部品に関係しています)私のPOCOです:EF4 CTP5自己参照階層エンティティマッピング

public class Part 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public Part ParentPart { get; set; } 
} 

データベーステーブルが作成されると、列名が「ID」、「名前」です、および "PartID"を含む。最後の列の名前を「ParentPartID」に変更するにはどうすればよいですか?

答えて

2

基本的に、あなたは独立協会で外部キーの名前を変更すると、これはそれを行います流暢なAPIコードです:

CTP5、このコードのスローのバグによるものしかし
protected override void OnModelCreating(ModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Part>() 
       .HasOptional(p => p.ParentPart) 
       .WithMany() 
       .IsIndependent() 
       .Map(m => m.MapKey(p => p.ID, "ParentPartID")); 
} 

自己参照の関連(これはあなたの関連タイプです)の例外です。回避策は、次のように外部キー協会にあなたの関連付けを変更するには、次のようになります。

public class Part 
{ 
    public int ID { get; set; } 
    public string Name { get; set; }     
    public int ParentPartID { get; set; } 

    [ForeignKey("ParentPartID")] 
    public Part ParentPart { get; set; } 
} 
+0

を...とCTP5で別のバグのため、この属性はParentPartのプロパティ名と一緒に、無視されます;-) – RedGlyph