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; } 
}    

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

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

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

我意识到我可以从 Job 中删除 Company 类并通过 Contact 导航,但如果可能的话,我不希望这样做。

感激地收到任何帮助

4

1 回答 1

0

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

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

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

有关如何使用模型构建器的更多说明,请查看我关于EF 导航属性的文章

于 2012-07-20T22:55:24.950 回答