2015-04-22 38 views
1

如何获取标识2以允许具有相同名称的多个用户?标识2如何允许重复名称逻辑删除

在我的应用程序中,我不想从数据库中物理删除用户。所以我给Users表添加了一个删除标志。

然后我放弃了索引,要求UserName是唯一的。并创建了一个过滤指数IX_USER_DELET_FG_Flase

DropIndex("dbo.USERS", "UserNameIndex ON dbo.USER");  
Sql("CREATE UNIQUE INDEX IX_USER_DELET_FG_Flase ON dbo.USERS (UserName) WHERE DeleteFg = 0"); 

索引检查名称是唯一的,当删除标志是假的。

这仍然不允许我创建一个与删除用户同名的用户。从源代码Identity Source看,有一个私有方法检查名称是否唯一。有没有办法禁用此验证?

或者我需要覆盖一些Identity方法来检查删除标志为false的用户。

有没有人以前做过这个,是很多工作还是更好的方法来做到这一点?

我怕如果我开始这样做,我会最终下一个大兔子洞

回答

1

您是关于兔子洞正确的 - 如果你开始挖的时候,就会有一个最终很多代码就是为了这个目的。执行逻辑删除的简单方法是在用户名尾部添加一些后缀,以避免重复。

我在想后缀也应该包含一些随机值,所以你可以多次删除同一个用户。

+0

而不是使用随机值,我认为时间戳作为后缀可能会更好,没有重复的风险,除非你的用户是时间旅行者。它也给你一些历史的感觉 –

+0

@JeffFinn这确实是一个更好的解决方案,我没有想到这一点。 – trailmax