代码之家  ›  专栏  ›  技术社区  ›  Mike

我走错方向了吗?

  •  1
  • Mike  · 技术社区  · 16 年前

    这是我的第一个MVC/LINQtoSQL应用程序。我在ASP.NET中使用现成的SQL成员身份通过我的系统跟踪用户。

    正如大多数人所知,UserId是一个guid,很好。然而,为了链接系统中其他用户创建的表,我决定使用username而不是userid。我这样做的原因是:

    1. 用户名是唯一的
    2. 它避免了我在处理db函数时必须进行额外调用。

    例如:我不必根据用户名查找userid来创建新的故事;我只需将User.Identity.Name插入到故事表中。

    “System.InvalidCastException:指定的强制转换无效。在System.Data.Linq.IdentityManager.StandardIdentityManager.SingleKeyManager“。。。

    每当主机上发生数据库插入时,就会发生这种情况。如果我理解正确,这是一个错误,当您将一个非整数字段(在我的例子中是username)链接到另一个非整数字段表(aspnet_user中的username)时,当前会发生这种错误。虽然报告的bug看起来有点不同,但它们是否相似?

    https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=351358

    更新

    我只是想在这里添加一些上下文。人们提出的一个好观点是,如果我想允许用户在将来更改用户名,这是很危险的。完全正确!

    但是,此应用程序严重依赖用户名。每个用户只创建一个故事。然后,他们使用:mysite/username链接到自己的故事。因此,应用程序将永远不允许他们更改用户名。这将给那些关注链接的人带来一个潜在的噩梦,他们只会看到链接不再存在。

    5 回复  |  直到 16 年前
        1
  •  1
  •   JonH    16 年前

    注意你关于用户名的评论是唯一的。安妮塔·塔克巴思和西摩·巴特斯结婚的那一刻,阿塔克巴思突然想要成为一对。

    只是一个想法!

        2
  •  1
  •   DrivenDevelopment    16 年前

        3
  •  1
  •   Jakub    16 年前

    但这必须符合您的应用程序要求。同样,需求往往会在没有开发人员控制的情况下发生变化。

        4
  •  0
  •   Codism    16 年前

    这是不好的,原因如下:

    1. 您提到避免额外的数据库调用。然而,通过连接表,并没有对数据库的“额外”调用。你可以说加入比不加入要昂贵。但是,很可能商店需要的用户信息比用户登录名更多(注意:用户名不是唯一的,用户登录名是唯一的)。因此,对于大多数数据库操作,您仍然需要加入。

    编辑:修改格式。我仍在学习如何使我的帖子看起来更好:-)

        5
  •  0
  •   Omar    16 年前

    使用用户名作为唯一标识符可能会在将来产生不良后果。如果您希望允许用户在将来更改其用户名,您将很难实现这一点。