这是我第一个MVC/Linq to SQL应用程序。我使用开箱即用的ASP.NET成员来跟踪用户通过我的系统。我该怎么办?
大家都知道,UserId是一个guid,很棒。但是,为了链接系统中的其他用户创建的表,我决定使用用户名而不是用户名。我这样做的原因是因为:
- 用户名是唯一反正
- 它阻止我不必处理DB函数时作出额外的呼叫。
例如:我不必查看基于用户名的用户名来创建新的故事;我只需将User.Identity.Name插入到故事表中。
现在我遇到了一些令人讨厌的并发症,这似乎与此有关。它在我的本地机器上正常工作,但不在主机上。我不断地得到了一句这样的错误:
“System.InvalidCastException:指定的转换是无效的System.Data.Linq.IdentityManager.StandardIdentityManager.SingleKeyManager” ......
这件事发生的时候插入主机上发生的数据库。如果我理解正确,这是当您将非整数字段(以我的用户名)连接到非整数字段(aspnet_user中的用户名)的另一个表时发生的错误。虽然报告的错误似乎有点不同,也许它们是相似的?
https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=351358
在任何情况下,MS错误或不 - 是存储的用户名,而不是用户ID在我的表坏主意?如果是这样,为什么?
更新
我只是想在这里补充一些更多的上下文。人们提出的一个很好的观点是,如果我想允许用户在将来更改他们的用户名,这是很危险的。完全有效!
但是,这个应用程序在很大程度上依赖于用户名。每个用户创建一个且仅有一个故事。然后他们通过使用mysite/username链接到他们的故事。因此,应用程序绝不允许他们更改他们的用户名。对于那些仅仅关注链接的人来说,它会导致潜在的噩梦,从而看到它不再存在。
是的,非常好 - 根据@Jakub所说的话(但稍微有趣一些)。 – Mike 2009-10-09 18:31:57