“循环或多个级联路径”与“ApplicationUser”模型

时间:2015-05-09 04:29:02

标签: asp.net-mvc entity-framework ef-code-first code-first

我在项目中定义了很多类,并且作为审计要求,项目中的每个实体都必须使用“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效果,因为它会影响所有部分中应用的功能。知道如何才能有效地解决这个问题?

我记得在我进行数据库编程的那些日子里,一个实体有两个外键到另一个实体的问题从来没有任何问题。

0 个答案:

没有答案