Это мое первое приложение MVC / Linq to SQL. Я использую стандартное членство SQL в ASP.NET для отслеживания пользователей в моей системе.
Как большинство из вас знает, UserId - это гид, отлично. Однако, чтобы связать другие пользовательские таблицы в системе, я решил использовать имя пользователя вместо идентификатора пользователя. Я сделал это потому, что:
- Имя пользователя в любом случае уникально
- Это не позволяет мне делать дополнительный вызов при обработке функций БД.
Так, например: мне не нужно искать идентификатор пользователя на основе имени пользователя, чтобы создать новую историю; Я просто вставляю User.Identity.Name в таблицу истории.
Теперь я столкнулся с некоторым неприятным осложнением, которое, похоже, связано с этим. Он работал нормально на моей локальной машине, но не на хосте. Я постоянно получал сообщение об ошибке, похожее на это:
"System.InvalidCastException: указанное приведение недопустимо. На System.Data.Linq.IdentityManager.StandardIdentityManager.SingleKeyManager" ...
Это происходило всякий раз, когда на хосте происходила вставка в базу данных. Если я правильно понимаю, это ошибка в настоящее время, которая возникает, когда вы связываете нецелочисленное поле (в моем случае имя пользователя) с другой таблицей нецелочисленного поля (имя пользователя в aspnet_user). Хотя представленная ошибка кажется немного другой, может быть, они похожи?
https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=351358
В любом случае, ошибка MS или нет - плохая идея хранить имя пользователя вместо идентификатора пользователя в моих таблицах? Если это так, то почему?
Обновление
Я просто хотел добавить сюда больше контекста. Хорошая мысль, которую люди поднимают, заключается в том, что это опасно, если я хочу разрешить пользователям менять свое имя пользователя в будущем. Совершенно верно!
Однако, это приложение сильно зависит от имени пользователя. Каждый пользователь создает одну и только одну историю. Затем они ссылаются на свою историю, используя: mysite / username. Поэтому приложение никогда не позволит им изменить свое имя пользователя. Это может вызвать потенциальный кошмар у людей, которые переходят по ссылке, чтобы увидеть, что ее больше не существует.