我在项目中定义了很多类,并且作为审计要求,项目中的每个实体都必须使用“AspNetUser”表的外键,一个指定创建记录的用户,另一个指定已更新它的用户。以下是“客户”实体的样本,但正如我所说,有大量实体都具有相同的要求:
public class Customer {
public int Id {get; set;}
// bunch of properties
[Required]
public string CreateUserId {get; set;}
[Required]
public string UpdateUserId {get; set;}
[ForeignKey("CreateUserId")]
public virtual ApplicationUser CreateUser {get; set;}
[ForeignKey("UpdateUserId")]
public virtual ApplicationUser UpdateUser {get; set;}
}
现在因为AspNetUser表有两个外键,当我想创建迁移并更新数据库时,我得到了一个很好的错误:
在表'Customers'上引入FOREIGN KEY约束'FK_dbo.Customers_dbo.AspNetUsers_UpdateUserId'可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。 无法创建约束。查看以前的错误。
我也明白,通过向“OnModelCreate”添加一些代码并删除“Customer”实体的级联效果,我将能够解决这个问题,但是,正如我所说,我的应用程序中的每个实体都要去有这两个指向AspNetUser表的链接,这意味着我必须每次使用我正在讨论的特定实体将这段代码添加到OnModelCreate中。
另外,我不想整体取消CASCADE DELETE效果,因为它会影响所有部分中应用的功能。知道如何才能有效地解决这个问题?
我记得在我进行数据库编程的那些日子里,一个实体有两个外键到另一个实体的问题从来没有任何问题。