使用LINQ查询两个数据库
本文关键字:两个 数据库 LINQ 查询 使用 | 更新日期: 2023-09-27 18:14:20
在我的控制器get方法中有以下内容
private PeopleContext Peopledb = new PeopleContext();
private IARContext db = new IARContext();
public ActionResult OwnerList()
{
var owners = from s in db.Owners
where s.Dormant == false
orderby s.Post.PostName
select s;
var viewModel = owners.Select(t => new OwnerListViewModel
{
Created = t.Created,
Post = Peopledb.Posts.FirstOrDefault(x => x.PostId == t.SelectedPostId).PostName.ToString(),
});
return PartialView("_OwnerList", viewModel);
}
当我尝试加载页面时,我得到了这个错误:
指定的LINQ表达式包含对与不同上下文关联的查询的引用。
我知道问题是LINQ不能查询两种不同的上下文,但在这里尝试了几种解决方案,我似乎无法解决这个问题并成功查询Peopledb。post表查找要在数据库中显示的每个实例的相关PostName。主人桌子。
你可以试试:
var owners = (from s in db.Owners
where s.Dormant == false
orderby s.Post.PostName
select s).ToList();
这将执行一个context
中的代码,并将另一个context
的List<Owner>
放在内存中。
还要查看.Select
部分的执行情况,它是否为每个owner
执行单独的查询?如果是这样,您应该对其进行优化,您可以事先使用ids
获得posts
,然后构建viewmodel
。
实体框架上下文只能与单个数据库一起工作。如果您想在这种情况下从另一个数据库获取数据,您可以创建代理视图,它将在您的dbcontext
的db中反映此数据。
使用AsEnumerable()
:
var viewModel = owners.AsEnumerable()
.Select(t => new OwnerListViewModel
...