0

我经常发现自己需要一些用户数据,例如用户名、配置文件属性以及来自数据库中其他表的其他一些数据,其中表通过 UserId(guid) 关联。让我解释一下:

aspnet_Users table:
UserId
username
...

Some table from which I retrive data:
Id
Post
DateTime
UserId
...

因此,对于我拉出的每个帖子(通常一次超过 20 个),我都需要每个帖子的用户名。调用类似的东西似乎很昂贵:

  string username = Membership.GetUser(UserID).UserName;

对于每个项目。好像我正在对数据库进行 20 次额外调用。这样做的正确方法是什么?我是否应该在我的 Linq to Sql 方案中包含 aspnet_Users 表,然后加入以便我可以一次提取它?

4

2 回答 2

2

我是否应该在我的 Linq to Sql 方案中包含 aspnet_Users 表,然后加入以便我可以一次提取它?

是的,至少我是这样做的。

另一种选择是创建一个字典并将所有用户存储在那里并在内存中进行查找,但在这种情况下,您需要监视对用户的更改,因此连接似乎是一个更容易的解决方案。

于 2012-04-29T07:17:30.263 回答
1

你不必。至少有两种可能的方法。

首先,您可以有一个自定义成员资格提供程序,它使用您自己的数据库和数据库中的自定义表。这样您就不必处理两个数据库,也不必执行额外的调用。

其次,如果您仍然想坚持SqlMembershipProvider使用aspnetdb数据库的内置函数,因此您有两个数据库 - 用户数据库和应用程序数据库,您可以创建从应用程序数据库到aspnetdb数据库的链接服务器/同义词。有一个小问题sqlmetal.exe会阻止它生成链接表的 linq2sql 模型,但是您可以为两个数据库创建模型,然后将其放在同一个命名空间中:

http://netpl.blogspot.com/2008/06/linq-and-synonyms-linked-servers.html

这样,您将拥有一个带有链接表的数据库的 linq2sql 模型,这将允许您跨数据库创建连接。在您的场景中,这意味着使用单个 linq2sql 语句来检索带有用户名的帖子。

于 2012-04-29T10:22:30.310 回答