如何在删除用户后将大量用户数据库记录移植到历史存储中?

时间:2018-01-10 06:50:30

标签: c# sql-server entity-framework

我目前正在使用SQL Server和Entity Framework。我们有一个大型数据库,其中包含许多通过关系链接的附加表。至少有15个表与主表“Users”有关系。

例如。 用户

  • UsersAddress
  • 用户配置
  • 用户类型
  • 产品
  • 购买
  • ...另外10个左右

现在,如果用户想要从系统中删除,由于税收原因和许多其他内部原因,我们仍需要保留交易数据等。如果用户删除了他们的帐户,则所有其他表数据会级联并丢失。因此,我们需要删除用户信息,但将其存储在另一组表中。

我们考虑创建一个起始表名为“已删除”的重复表。例如DeletedUsers - > DeletedUserAddress等..

但是通过id,新建一个模型,将其发送到已删除的表,拉下一个表数据,新建一个模型,将其存储到已删除的表等等,这似乎很奇怪。然后在最后删除主用户表记录,并将所有记录级联并从数据库中删除。

任何人都可以提出更有效的存储历史数据的方法。

我可以看到,如果我试过

//GET THE USER
UsersTableModel user = await db.Users.SingleOrDefault(x => x.id == 1234);

//AIM TO STORE
db.DeletedUsers.Add(user);

不起作用,我需要完全新建一个DeletedUsers模型并添加。

有更简单的方法吗?

由于

2 个答案:

答案 0 :(得分:2)

您可以使用软删除选项,您可以在表格中添加另一列“isDeleted”=“0”或“1”,您可以根据isDeleted选项对其进行过滤...这样您就可以保存你的记录

答案 1 :(得分:2)

希望它可以帮到你!

有15个表与User表有关系。因此,如果从User表中删除用户,则还将删除15个表中的相关数据(级联)。因此,对15个表数据进行历史记录很困​​难/ NoLogic。

解决方案:不要在用户表格中删除用户,只需在“用户”表格中按住一列,例如 IsDeleted 。将一个新列添加到名为 IsDeleted 的用户表中,并使用0(活动),1(已删除)进行更新。

然后在获取用户记录,交易详细信息时,您应该根据需要添加过滤器(where子句)。喜欢以下,

db.Users.Where(x=>x.IsDeleted==0) // to fetch users and details except deleted users
db.Users.Where(x=>x.IsDeleted==1) // to fetch deleted users and details