繁体   English   中英

具有多个数据库的实体框架

[英]Entity Framework with multiple databases

无论如何,是否可以在单个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”),但没有一篇涉及多个数据库名称。

作为一种可能的解决方法,您可以在第一个数据库中的第二个数据库中创建表的视图,并将映射指向该视图。

我很确定这是不可能的。 上下文源自DbContext

DbContext实例代表工作单元和存储库模式的组合,因此它可用于从数据库查询并将更改分组在一起,然后将更改作为单元写回到商店。 DbContext在概念上类似于ObjectContext。

DbContext的配置(连接字符串,架构等)特定于单个数据库。

这是不可能的。 上下文的概念低于数据库的概念,允许这样做可能是一个不好的做法。 允许这样的事情可能会使开发人员忘记他们正在处理两个数据库,而要注意由此产生的所有性能影响。

我想您仍然应该可以使用两个上下文并编写优美的代码。

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()

首先在身份验证数据库上下文上执行查询,以便为第二次查询提供参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM