在 EF 中定义一个实体,在删除时保留相关数据
Define an entity in EF that keeps related data on delete
我有两个实体,User 和 StockMovement。
在我的系统中,用户可以从存储中添加或删除库存,在这样做时,应该创建一个 StockMovement,引用所述用户并包含有关用户执行的移动的详细信息。
我还希望此 StockMovement 保留在我的数据库中,即使用户已被删除。这意味着如果我的用户被删除,应该保留引用他的 StockMovements。
我正在使用 EF 来处理我的持久性。这样,当我删除一个用户时,由于 StockMovement 对用户有一个外键约束,我的 StockMovement 实体将丢失该用户,使其变得无用。但我想在 StockMovement 中保留已删除用户的用户名。
有什么方法可以实现这种行为吗?
为了防止 EF 中的级联删除,据我所知,FK 必须可以为空(Guid?),即 Stock table 中的 FK 必须在删除用户对象之前设置为 Null防止这种情况发生,否则它会在大多数数据库中导致引用约束冲突。有一些非常好的基本内容文档:
https://docs.microsoft.com/en-us/ef/core/saving/cascade-delete
我建议不要真正删除用户。相反,将它们标记为已删除。如果您需要删除他们的个人信息 (GDPR),您可以对其进行编辑(将他们的部分信息替换为 *** 或其他内容)并仍然保留数据库记录。这种技术称为“软删除”。
这篇关于在 EF 核心中软删除实体的文章可能会有所帮助:
我有两个实体,User 和 StockMovement。 在我的系统中,用户可以从存储中添加或删除库存,在这样做时,应该创建一个 StockMovement,引用所述用户并包含有关用户执行的移动的详细信息。
我还希望此 StockMovement 保留在我的数据库中,即使用户已被删除。这意味着如果我的用户被删除,应该保留引用他的 StockMovements。
我正在使用 EF 来处理我的持久性。这样,当我删除一个用户时,由于 StockMovement 对用户有一个外键约束,我的 StockMovement 实体将丢失该用户,使其变得无用。但我想在 StockMovement 中保留已删除用户的用户名。
有什么方法可以实现这种行为吗?
为了防止 EF 中的级联删除,据我所知,FK 必须可以为空(Guid?),即 Stock table 中的 FK 必须在删除用户对象之前设置为 Null防止这种情况发生,否则它会在大多数数据库中导致引用约束冲突。有一些非常好的基本内容文档:
https://docs.microsoft.com/en-us/ef/core/saving/cascade-delete
我建议不要真正删除用户。相反,将它们标记为已删除。如果您需要删除他们的个人信息 (GDPR),您可以对其进行编辑(将他们的部分信息替换为 *** 或其他内容)并仍然保留数据库记录。这种技术称为“软删除”。
这篇关于在 EF 核心中软删除实体的文章可能会有所帮助: