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

时间:2014-05-28 08:04:05

标签: c# entity-framework webforms

我对实体框架非常陌生,我正在尝试做类似以下情况的事情。

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

我不知道基本结构应该如何。

我虽然在类库上有 EF 。因为我知之甚少,请指导我说明。

3 个答案:

答案 0 :(得分:1)

由于您使用的是两个不同的数据库,唯一可行的选择是创建两个独立的概念模型。即使您能够将两个不同的数据库合并到一个概念模型中,维护数据库的大小也会很难实现。

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

例如:

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

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

查看Repository pattern

答案 1 :(得分:0)

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

例如:metadata = res:///EFTestModel.csdl | res:///EFTestModel.ssdl | res:///EFTestModel.msl; provider = System.Data.SqlClient; provider connection string ="数据源=。\;初始目录= EFTest;集成安全性= True; MultipleActiveResultSets = True" *

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

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

我还没有做过足够的研究,但也许Windows Server AppFabric(Codename Velocity)可能是解决这个差距的桥梁。

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

答案 2 :(得分:0)

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