实体框架与两个数据库(完全不同的模式)

本文关键字:模式 两个 框架 实体 数据库 | 更新日期: 2023-09-27 18:05:35

我对实体框架很陌生,我正试图做一些像下面的场景。

我正在创建ASP.net web从应用程序。这个网站需要连接到两个模式完全不同的数据库。

我不知道基本结构应该是怎样的。

我以为在类库中有EF。我的知识比较少,请多指教。

实体框架与两个数据库(完全不同的模式)

由于您正在使用两个不同的数据库,因此唯一可行的选择是创建两个单独的概念模型。即使您能够将两个不同的数据库合并到一个概念模型中,但如果数据库的规模相当大,维护起来也是一件痛苦的事情。

两个模型可以驻留在同一个项目中,在不同的文件夹中以获得不同的命名空间。

。:

Company.MyApp.DataModel
Company.MyApp.DataModel.Model1
Company.MyApp.DataModel.Model2

然后你可以在这两个模型的上面放一个新的层来完成所有繁重的工作,如果你想的话,甚至可以让它们看起来像一个数据库,或者将两个模型中的实体数据合并到一个DTO或类似的东西中。

查看Repository模式

如果你考虑一下,当你用Visual Studio创建一个EDM模型时,它会要求你提供一个现有的数据库,当完成创建模型时,它会生成一个EF连接字符串,该字符串在内部指向给定的底层数据库连接字符串。

E。g: metadata=res:///EFTestModel.csdl|res:///EFTestModel.ssdl|res:///EFTestModel.msl;provider=System.Data.SqlClient;provider connection string="Data Source=.';Initial Catalog=EFTest;Integrated Security=True;MultipleActiveResultSets=True"*

所以每个模型只匹配一个数据库,只匹配一个连接字符串。

EF4仍然不支持创建一个适用于N个存储模型的概念模型。至少任何内置提供程序都不支持这一点。也许在将来,这可以通过一个新的提供者来完成,它结合了许多存储的支持(来自相同的提供者或不同的提供者)。

我还没有对此做足够的研究,但也许Windows Server AppFabric(代号Velocity)可以成为跨越这一鸿沟的桥梁。

注意:我甚至尝试手动编辑xml的EDM (edmx)插入第二个元素在标签内,但它不匹配的EDM xml模式,所以VS警告它:错误10021:重复的模式元素遇到

您将使用模型优先的方法,因为数据库已经存在。您需要为这两个数据库创建两个edmx。您可以创建一个模型项目,您可以在app.config文件中为edmx提供连接字符串,然后创建您的edmx.