這是我第一個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