代码与多个外键的第一个关系

时间:2012-07-15 11:03:55

标签: entity-framework ef-code-first code-first

我有一个场景我首先使用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; } 
}    

但是,当我构建数据库时,我收到以下错误:

在表'Contacts'上引入FOREIGN KEY约束'FK_Contacts_Company_CompanyId'可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。

所以有一点研究表明,答案是使用Fluent API根据需要定义映射,但我无法理解如何执行此操作或找到类似场景的示例。

我意识到我可以从Job中移除Company类并浏览Contact,但如果可能的话我不想这样做。

感激不尽的任何帮助

1 个答案:

答案 0 :(得分:0)

您希望使用EF模型构建器来设置这些关系。

如何为您的某个属性执行此操作的示例如下:

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

有关如何使用模型构建器的更多解释,请查看我在EF Navigation Properties上的文章