【发布时间】:2014-09-12 16:49:55
【问题描述】:
我想知道 EF4 是否支持跨数据库关系?例如:
db1
Author
Id
Name
db2
Posts
Id
Content
db1.Author.Id
理想情况下,我需要做什么才能在我的 ef4 模型中获得这种关系?
你们有什么想法吗?
谢谢
【问题讨论】:
标签: entity-framework-4 cross-database
我想知道 EF4 是否支持跨数据库关系?例如:
db1
Author
Id
Name
db2
Posts
Id
Content
db1.Author.Id
理想情况下,我需要做什么才能在我的 ef4 模型中获得这种关系?
你们有什么想法吗?
谢谢
【问题讨论】:
标签: entity-framework-4 cross-database
我发现 this entry in Microsoft Connect 回答了关于 EF 目前提供的支持的问题(实际上还不支持)。
还发现了 a thread in Social MSDN 关于这个问题。
Stack Overflow 上的其他链接:
总而言之,唯一给出的替代方案是:
【讨论】:
如果您的数据库支持同义词,您可以欺骗 EF 跨越多个数据库。我写了怎么做here。
基本上,每个数据库都有一个 edmx 文件,以及一个将它们合并到单个 edmx 文件的脚本。同义词用于通过使用实际表名从另一个数据库引用一个数据库,因此当您尝试从 database1 访问 database2.table 时,EF 不会出错。您仍然需要在 EF 模型中手动设置两个数据库之间的链接,但是一旦设置好,即使您重新运行合并脚本,它们也会保留。
设置同义词和合并 edmx 文件的脚本已发布在链接中
【讨论】:
我最近开始了一个项目,该项目使用带有两个数据库的实体框架,一个 Oracle 和一个 SQL Server。我在实体框架中找不到有关跨数据库或多数据库支持的任何信息。
来自 MS Entity 框架团队的大多数帖子已经有几年的历史了,并且表明在一个模型中包含两个数据库并不是很快就会包含的功能。尽管我怀疑答案是否定的,但我很想知道它是否包含在 2010 年的具体答案。
目前的项目通过为每个数据库设置一个单独的实体模型来绕过这个限制。这已经解决了我们迄今为止在项目中遇到的大多数场景的问题。
如果我们需要同时从两个数据库中查询数据,我们只需在一个或另一个数据库中创建一个视图。由于我们使用的是 Oracle 和 SQL Server,因此该视图将使用链接服务器 (SQL) 或 DBLink (Oracle)。
实体框架中视图的缺点是我们必须花费比我预期更多的时间才能使主键正常工作。
希望这会有所帮助。
【讨论】: