2010-12-14 48 views
1

有一個簡單的模型:CTP5:自我引用問題?

public class Node 
{ 
    public long Id { get; set; } 
    public virtual Node Parent { get; set; } 
} 

下面的地圖代碼會拋出異常:

public class NodeContext : DbContext 
{ 
    public DbSet<Node> Nodes { get; set; } 

    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 

     modelBuilder.Entity<Node>().HasOptional(n => n.Parent).WithMany().IsIndependent().Map(m => m.MapKey(p => p.Id, "ParentId")); 

    } 
} 

難道是因爲它不能夠自我參照的自定義外鍵的名字做呢?

+0

什麼是CTP5? Linq2Entities只是一個猜測... – leppie 2010-12-14 11:20:59

+0

什麼是拋出異常? – Paul 2010-12-16 19:07:35

回答

1

我也是這樣做的,但我不依賴EF獲取密鑰,我自己也是這樣做的。所以我Node類如下所示:

public class Node 
{ 
    public int Id {get;set;} 
    public int ParentId {get;set;} 

    public virutal Node Parent {get;set;} 
    public virtual ICollection<Node> Children {get;set;} 
} 

然後模型構建器的設置如下:

builder.Entity<Node>().HasKey(x => x.Id); 

builder.Entity<Node>() 
    .HasOptional(s => s.Parent) 
     .WithMany(c => c.Children) 
      .HasForeignKey(s => s.ParentId); 

builder.Entity<Node>().ToTable("Node");