2012-09-05 78 views
1

我遇到了一些問題,需要爲數據庫設置正確的關係。在CodeFirst EF中互相引用創建關係

在的話... 我想有一個事務所可多(零:很多)分公司

事務所我希望能夠指定一個HeadOffice上這將存在將在表(零:一個)存在

我希望看到的是事務所表有followi NG領域:編號,姓名,HeadOfficeId並在分行我希望看到:ID,TradingAs,名稱,Firm_Id

相反,我看到:

事務所表有以下字段:ID,名稱,HeadOfficeId

分行我希望看到:ID,TradingAs,名稱,Firm_Id,Firm_Id1

模型類如圖所示

public class Firm 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 

    public virtual ICollection<Branch> FirmBranches { get; set; } 

    public virtual LawFirmBranch HeadOffice { get; set; } 
} 

public class Branch 
{ 
    public int Id { get; set; } 
    public string TradingAs {get;set;} 
    public string Name {get;set;} 


    public Firm Firm { get; set; } 

} 

據我所知,這會導致循環引用類型問題,我很高興公司HeadOffice最初爲null,直到FirmBranches屬性中有值。

是否有某種方式,我可以指定HeadOffice上具有空或一個類型的關係

+0

HeadOffice已經是0或1,因爲它有一個Id存在與否.... – Basic

回答

1

如果你想明確地做到這一點在你的模型,你可以通過數據註解做到這一點:

public class公司 { public int Id {get;組; } public string Name {get;組; }

public virtual ICollection<Branch> FirmBranches { get; set; } 

[ForeignKey("HeadOffice")] 
public int? FirmId {get;set;} 

public virtual LawFirmBranch HeadOffice { get; set; } 

}

如果你不想這暴露了你的代碼,你需要通過流暢做到這一點:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Firm>() 
      .HasOptional(f => f.HeadOffice) 
      .WithOptionalDependent(); 
    } 

這就造成:

enter image description here

如果你想改變密鑰的名字,你可以添加一個映射到第e流利的地圖:

 modelBuilder.Entity<Firm>() 
      .HasOptional(f => f.HeadOffice) 
      .WithOptionalDependent() 
      .Map(m => m.MapKey("YourKeyName"));