无论如何在单个EF上下文中映射多个SQL Server数据库?例如,我正在尝试做这样的事情
select order from context.Orders
where context.Users.Any(user => user.UserID == order.UserID)
我希望按以下方式生成SQL:
select .. from store.dbo.order where userID in
(select userID from authentication.dbo.user)
并注意数据库名称不同 - 存储在一个地方,身份验证在另一个地方。
我发现了一些处理多个模式的文章(在这种情况下是'dbo'),但没有一个处理多个数据库名称。
答案 0 :(得分:1)
作为一种潜在的解决方法,您可以从第一个数据库中的第二个数据库创建表的视图,并将映射指向视图。
答案 1 :(得分:0)
我很确定这是不可能的。上下文源自DbContext。
DbContext实例表示工作单元和存储库模式的组合,以便它可以用于从数据库进行查询,并将更改组合在一起,然后将这些更改写回到商店中单元。 DbContext在概念上类似于ObjectContext。
DbContext的配置(连接字符串,模式等)特定于单个数据库。
答案 2 :(得分:0)
这是不可能的。上下文的概念低于数据库的概念,允许这可能是一种不好的做法。允许这样的事情可能会导致开发人员忘记他们正在处理两个数据库,并注意由此产生的所有性能影响。
我想你应该仍然可以使用两个上下文并编写优雅的代码。
var userIds = AuthContext.Users
.Where(user => user.Name = "Bob")
.Select(user => user.UserId)
.ToList();
var orders = StoreContext.Orders
.Where(order => userIds.Contains(order.UserId))
.ToList()
首先对身份验证数据库上下文执行查询,以便为第二次查询提供参数。