我有一个场景我首先使用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,但如果可能的话我不想这样做。
感激不尽的任何帮助
答案 0 :(得分:0)
您希望使用EF模型构建器来设置这些关系。
如何为您的某个属性执行此操作的示例如下:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Contact>().HasOptional(e => e.Company).WithMany(c=>c.Contacts);
}
有关如何使用模型构建器的更多解释,请查看我在EF Navigation Properties上的文章