2

我目前正在从事一个 SOA 项目,在某些地方,服务使用轻量级数据库 (SQL CE 4.0) 是有意义的,而在其他地方则需要更健壮的数据库(现在是 SQL Express,但可能会扩大规模)到更大的版本)。

尽管 SQL Express 和 SQL CE 的模型和表结构相同,但我无法弄清楚如何让 Entity Framework 使用相同的 EDMX 来处理这两个数据库。两者的概念模型相同,存储模型的唯一区别是用于访问数据库的提供程序名称。

我是否遗漏了什么,或者我需要保留两个基本相同的模型,每个数据库一个。

我正在使用 .NET 4.0、实体框架和 VS 2010 SP1

4

2 回答 2

1

不幸的是,我认为您必须使用不同的提供程序创建两个单独的 SSDL,并手动使它们保持同步(这实际上可以通过一些构建后的脚本来完成,该脚本将复制 ssdl 文件并替换提供程序)。您仍然必须确保表结构相同:

  • 相同的表名
  • 相同的列名
  • 相同的数据类型

最后一点可能很关键,因为我知道 SQL CE 不支持 SQL Server 中常见的某些类型。例如,我认为navarchar(max)SQL nvarbinary(max)CE 不支持它。

要强制 EF 创建 SSDL 文件而不是将其包含为资源,请将元数据工件处理(在 EDMX 设计器的属性中)更改为复制到输出目录并修改连接字符串。是一篇相关文章。

于 2011-04-10T13:36:37.087 回答
0

如果您不介意切换到 Code First,您可以这样做。Gallery Server Pro 3.0使用 Code First 来定位 SQL CE 或 SQL Server,具体取决于用户的偏好。有一个单一的代码库,唯一的区别是 web.config 中的连接字符串。

这是一个开源项目,因此您可以在代码中看到它是如何完成的。

于 2013-04-02T19:26:05.593 回答