linq to sql query with 2 dbml files

时间:2013-04-21 20:33:49

标签: c# asp.net-mvc linq-to-sql

我有MyFriendFollowStatus的对象,对于每个朋友,我需要来自2个不同数据库的信息,所以我写了这样的东西

db1Context FFdb = new db1Context();
db2Context EEdb = new db2Context();

foreach (fbFriendsFollowStatus a in fbids)
{
    long ffID = FFdb.FFUsers.Where(x => x.FacebookID == a.fbid).FirstOrDefault().FFUserID;
    a.ffID = ffID;
    int status = EEdb.StatusTable(x => x.ffID == ffid).FirstOrDefault().Status;
    a.Status = status;
}

这可行,但它似乎没有真正调用2个数据库 - 每个用户一次,LinqToSql中是否有一些内容可以帮助这样的东西?或者某种类型的连接我可以使用2个不同的数据库吗?

1 个答案:

答案 0 :(得分:2)

好吧,您始终可以将N+1查询问题限制为3个查询 - 一个用于获取用户,一个用于从第一个数据库获取用户数据,另一个用于第二个数据库。然后将所有结果连接到内存中 - 这将限制与数据库的连接,这可以提高应用程序的性能。

我不知道linq-to-sqlentity framework是否提供了来自不同数据库的建筑模型 - 这可能会造成一些性能问题 - 比如包含或某些东西,但我可能根本就没有意识到这一点特征

执行您要实现的目标的示例代码看起来像这样:

var facebookIds = fbFriendsFollowStatus.Select(a => a.fbid);
var FFUserIds= FFdb.FFUsers.Where(x => facebookIds.Contains(x.FacebookID)).Select(x => new { x.FacebookID, x.FFUserId)
var statuses = EEdb.StatusTable.Where(x => FFUserIds.Contains(x.ffID)).Select(x => new { x.ffID, x.Status})

然后是一些简单的代码来匹配内存中的结果 - 但这很简单。 请注意,此代码是示例 - 如果我不匹配某些ID或其他内容,但想法应该是明确的。