l2s 架构中的成员资格表

本文关键字:成员 l2s | 更新日期: 2023-09-27 18:32:36

我经常发现自己需要一些用户数据,如用户名,配置文件属性以及数据库中其他表中的其他一些数据,其中表通过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表,然后联接,以便一次可以拉取它?

l2s 架构中的成员资格表

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

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

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

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

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

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

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

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