2012-07-15 59 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

解释