【问题标题】:Map one table to a different database with Entity Framework使用 Entity Framework 将一个表映射到不同的数据库
【发布时间】:2025-12-14 22:35:01
【问题描述】:

我想将多个数据库组合成一个实体框架“对象模型”。我不需要在运行时动态更改数据库。这是一个静态配置问题。它应该是这样的:

  1. Entity1 映射到 DB1.dbo.Entity1
  2. Entity2 映射到 DB2.dbo.Entity2

我应该可以说:

new XyzContext().Entities1
new XyzContext().Entities2

如何配置 Entity Framework 以记录我的多个数据库?

我不想创建视图或同义词。这个问题是关于仅 EF 的解决方案。我正在使用最新的 EF 版本,可以切换到任何版本。

【问题讨论】:

  • 到目前为止,您为解决问题做了什么尝试,结果如何?
  • 我已经在网上搜索了这个,只发现了黑客或解决方法(不符合我的要求)。我查看了 ToTable 方法,没有找到指定数据库名称的方法。

标签: .net sql-server entity-framework


【解决方案1】:

没有办法直接使用 Entity Framework,上下文链接到数据库,您不能直接访问该数据库之外的表。我不知道你的情况,但如果我首先是你,我会尝试将这些表移到我的数据库中。

如果这不可能,一种解决方法就是为您的外部表创建视图。但是要小心填充视图,记住每次修改外部表的架构时,都要重新创建视图,这很容易破坏。

【讨论】:

  • 嗯,我觉得还不错。对于我的数据库,它是一个孤立的数据岛,与其他数据库隔离。如果我的应用程序需要访问两个数据库,我会使用两个不同的上下文。因为它们包含孤立的数据。想一想,你能在来自不同数据库的表中建立关系吗?
  • 为什么需要来自同一个上下文的两次访问?你不能使用两个上下文吗?
  • @MarcCals 确切地说,DbContext 不仅仅是数据库连接的抽象。它带有事务状态,这对两个数据库没有意义。
  • 这种架构的原因是有一些巨大的表需要在不同的数据库中。不同的恢复模式、备份和存储。
  • 您的所有担忧原则上都是有效的,但不适用于我的具体情况。不过,感谢您指出它们。 “巨大的表”只引用来自小型数据库的大部分静态数据。在数据库还原事件的情况下,任何不一致都会很小并且可以接受。我会让这个问题搁置几天,然后问题接受你的回答。