c# - EF中的跨数据库查询

标签 c# sql-server entity-framework cross-database

Entity Framework中有什么方法可以实现跨数据库查询吗?假设我有两个实体 User 和 Post,User 实体在 database1 中,而 Post 在 database2 中,这意味着这些实体在不同的数据库中。我应该如何在 Entity Framework 中获取用户的帖子?

最佳答案

我知道这是一个老问题,但这实际上是可能的。如果数据库位于同一台服务器上,那么您需要做的就是使用 DbCommandInterceptor

例如,如果我将 DbCommandInterceptor 附加到 MyContext,我可以拦截所有命令执行并将查询中的指定表替换为我的完整 -数据库路径。

public override void ReaderExecuting(DbCommand command, DbCommandInterceptionContext<DbDataReader> interceptionContext)
{
    // Here, I can just replace the CommandText on the DbCommand - but remember I
    // want to only do it on MyContext
    var context = contexts.FirstOrDefault() as MyContext;
    if (context != null)
    {
        command.CommandText = command.CommandText
            .Replace("[dbo].[ReplaceMe1]", "[Database1].[dbo].[Customers]")
            .Replace("[dbo].[ReplaceMe2]", "[Database2].[dbo].[Addresses]")
            .Replace("[dbo].[ReplaceMe3]", "[Database3].[dbo].[Sales]");
    }

    base.ReaderExecuting(command, interceptionContext);
}

这种方法的另一个好处是 EF 模型映射仍然可以正常工作并尊重列属性,不需要 View ,也不需要存储过程。

关于c# - EF中的跨数据库查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14341782/

相关文章:

c# - ApiController 中的异步初始化

c# - 从 (GAC) 类库初始化 Automapper

c# - 批量更新数据库的最快方法?

wcf - Entity Framework 和使用 WCF 服务

c# - 从 C# 类生成数据库/实体数据模型

c# - 如何让 Moq 验证具有 out 参数的方法

C# 问题创建删除注册表项的方法

mysql - Node.js MySQL 批量插入操作失败

mysql 和 unicode 字符

sql-server - 触发器运行时 dbo 用户抛出 "Server principal is not able to access the database"