Asp.net mvc EF代码第一级级联空

Asp.net mvc EF代码第一级级联空,asp.net-mvc,entity-framework,ef-code-first,Asp.net Mvc,Entity Framework,Ef Code First,我们有一个ASP MVC Entity Framework 6代码优先项目,在MS SQL数据库中有70多个表 对于每个表上的每条记录,我们将存储上次修改它的用户。几乎每个表的结构如下所示: public class TableA { public int Id{ get; set; } ..... public DateTime? DateModified { get; set; } public int? UserModifiedId { get; set;

我们有一个ASP MVC Entity Framework 6代码优先项目,在MS SQL数据库中有70多个表

对于每个表上的每条记录,我们将存储上次修改它的用户。几乎每个表的结构如下所示:

public class TableA
{
    public int Id{ get; set; }
    .....
    public DateTime? DateModified { get; set; }
    public int? UserModifiedId { get; set; }
    public virtual ApplicationUser UserModified { get; set; }
}
我们的问题是,如果用户Id位于任何表的属性UserModifiedId中,则在删除用户时会出现错误

我们需要将UserModifiedId=UserId的所有表的UserModifiedId设置为NULL

在过去,我们在DELETE SET NULL上设置此添加到表,但EF不允许这样设置表

你知道我们怎样才能做到这一点吗

更新


我们已经知道EF管理这是因为子项被加载到上下文中,但是我们不能每次要删除用户时加载超过70个表。

一种方法是添加一个迁移,该迁移可以修改所有表,这些表应该以这种方式在DELTE SET NULL上进行级联(仅适用于上面的示例代码):


另一个解决方法-不实际删除用户,而是将其标记为“软删除”,即通过设置
user.deleted=true
属性。我已经看到了此解决方案。这是一个很好的解决方案,但我一直在寻找“更干净”的东西哦,好的。据我所知,实体框架6是不可能开箱即用的。EntityFrameworkCore有可能以您想要的干净方式完成它。
public partial class AddOnDeleteSetNull : DbMigration
{
    public override void Up()
    {
        Sql("ALTER TABLE dbo.TableA DROP CONSTRAINT [FK_dbo.TableA_dbo.Users_UserModifiedId]");
        Sql("ALTER TABLE dbo.TableA ADD CONSTRAINT [FK_dbo.TableA_dbo.Users_UserModifiedId_SetNullOnDelete] FOREIGN KEY (UserModifiedId) REFERENCES dbo.Users(UserId) ON UPDATE NO ACTION ON DELETE SET NULL");
    }

    public override void Down()
    {
        // Here you have to undo the changes!
        // ...
    }
}