2012-07-15 57 views
0

我有一個場景,我首先使用EF代碼有點混亂。我創建的類是下面:代碼與多個外鍵的第一個關係

public class Company 
{ 
    public int Id { get; set; } 
    public List<Contact> Contacts { get; set; } 
    public List<Job> Jobs { get; set; } 
} 

public class Contact 
{ 
    public int Id { get; set; } 
    [ForeignKey("CompanyId")] 
    public virtual Company Company { get; set; } 
    public int CompanyId { get; set; }  
    public List<Job> Jobs { get; set; } 
} 

public class Job 
{ 
    public int Id { get; set; } 
    [ForeignKey("CompanyContactId")] 
    public virtual CompanyContact CompanyContact { get; set; } 
    public int CompanyContactId { get; set; } 
    [ForeignKey("CompanyId")] 
    public virtual Company Company { get; set; } 
    public int CompanyId { get; set; } 
}  

然而,當我建立DB我得到以下錯誤:

表上引進國外KEY約束'FK_Contacts_Company_CompanyId「聯繫人」可能會導致循環或多重級聯路徑。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY約束。

因此,一個小小的研究表明,答案就是使用Fluent API來根據需要定義映射,但我無法弄清楚如何做到這一點或找到類似場景的示例。

我意識到我可以從Job中刪除公司類,並通過聯繫人進行導航,但我不希望如果可能。

任何幫助感激地接受

+0

有很多流利的API使用的文章 – Eranga 2012-07-15 12:31:56

+0

*因此,一個小小的研究* - 正確的聲明將不會被研究,因爲簡單地將*實體框架「導致週期或多個級聯路徑」*谷歌將爲您提供答案樣本(包括[這一個](http://stackoverflow.com/questions/5828394/entity-framework-4-1i-i nverseproperty屬性 - 和 - 外鍵))。那麼流利的映射不適合你? – 2012-07-16 09:27:17

+0

不......我看到了那個(還有很多其他的)。正如上面提到的,我正在努力理解如何構建流暢的映射,因爲你發佈的線程表示。對不起,如果我缺乏理解冒犯你! – ledragon 2012-07-16 15:17:34

回答

0

您要使用的EF模型生成建立這些關係。

,你會怎麼做這爲您的屬性之一的一個例子是以下幾點:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Contact>().HasOptional(e => e.Company).WithMany(c=>c.Contacts); 
    } 

更多的圍繞着如何使用模型構建器看看我的文章EF Navigation Properties

解釋