2

我刚开始学习 ASP.NET MVC。我正在开发一个使用标准项目模板创建的项目,该模板默认使用SqlMembershipProvider. 这已经在我的项目中自动创建了一个 ASPNETDB.mdf 数据库来保存成员信息。如何将存储在此数据库中的成员与我的实际应用程序数据相关联?

在我的应用程序数据库中存储或检索用户特定信息时,我是否应该在我的操作方法中简单地引用当前用户名,this.User.Identity.Name用作键?还是我应该this.User.Identity.UserId改用?我一直认为基于整数的 ID 比字符串或 GUID 基本 ID 查找要快得多。但是 aspnet_Users 表的主键是一个 GUID 字段。

this.uservs之间有什么区别this.HttpContext.User吗?从IPrincipal这些属性MembershipUser返回的与从Membership.GetUser(). 这些有什么区别?

另外,是否最好将会员信息保存在与应用程序数据库不同的数据库中?还是可以将它们合并到一个数据库中?

4

3 回答 3

1

您的问题有几个要素,几点:

我通常使用身份名称,因为它通常使用起来更有效。get user 函数从数据库中获取完整的用户数据并更新上次访问时间。IPrinciple 不需要这个并用于内存数据。因此,用户名属性更快更容易获得。主要的警告是如果您可能允许用户更改他们的用户名,在这种情况下 ID 会更有意义。

听起来您正在考虑拥有大量与用户相关的记录。你是对的,整数是最快的查找。如果您有大量数据,那么您可能希望通过扩展成员资格提供程序或通过添加映射表来将您的用户映射到一个整数。

至于this.User vs HttpContext.User,没有区别。

于 2011-04-18T20:51:41.060 回答
1

默认模板应该在 Models 文件夹中为您提供一个“AccountModel”,该文件夹为某些表单身份验证/成员资格函数创建包装器。您可以对其进行扩展并添加一个函数来返回当前的“HttpContext.Current.User”,它是存储在当前 HttpContext 中的 IPrincipal。使用 Name 属性,您可以通过用户名查询 Membership 以获取 Membership 数据(IPrincipal 只存储非常基本的信息,例如用户名、角色等,MembershipUser 具有从数据库中提取的所有其他数据)。

SqlMembershipProvider 在 imo 中非常糟糕,除了用于小型项目之外,它还受到限制......同时也很复杂。我现在在一个拥有 2000 多个帐户的网站上使用它,如果你想定制任何东西,它就是一个皮塔饼。最好(网上有很多例子)只是编写自己的使用表单验证并摆脱会员资格的废话。我现在有一个,我希望我一开始就写一个。

于 2011-04-18T20:21:54.197 回答
0

在我使用过 SqlMembershipProvider 的应用程序中,我通常将其表/存储过程存储在与我的应用程序表相同的数据库中,然后使用外键将我的应用程序表链接到用户表。有一次我没有这样做是当一个用户数据库将在多个不同的应用程序之间共享时,每个应用程序都有自己的应用程序数据库。

于 2011-04-18T20:23:05.940 回答