实体框架Oracle和Sql Server - 如何构建独立于数据库的应用程序

时间:2012-01-24 14:06:47

标签: sql-server database oracle entity-framework-4.1 migration

我们正在尝试构建一个使用Oracle和SQL Server(不是同时)的数据访问层。

我们使用EF Model-first来创建模型并创建用于构建数据库的SQL脚本。我们的第一个想法是创建2个EDMX文件,每种类型一个,并根据客户的需要使用适当的文件。我们使用Oracle和SQL Server数据库生成工作流程和DDL生成模板为每个数据库创建脚本。

我们的主要问题是当数据库架构发生变化时,我们不想删除并重新创建数据库,而只创建迁移脚本来更新我们模型上的数据库(客户端有许多数据会丢失)。

我们使用EF power pack来提取SQL Server的迁移脚本,但对Oracle来说没有类似的东西。

我们希望帮助找到一个好的数据层(如果可能且不复杂的话,为Oracle和SQL Server提供1个EDMX)以及从我们的模型生成数据库更改以在新应用程序中更新现有客户端数据库的好方法释放

我们发现这是一个起点 http://msdn.microsoft.com/en-us/data/ff830362但是没有提到Oracle支持。

我们尝试过代码优先和EF迁移,但Oracle在数据库创建和迁移方面再次失败了。

关于我们如何实现这一目标的任何建议?

谢谢

2 个答案:

答案 0 :(得分:4)

SQL Server和Oracle都无法使用单个EDMX。 EDMX由CSDL(实体定义),SSDL(数据库定义),MSL(这些定义之间的映射)三部分组成。 SSDL必须始终以具体数据库为目标,因此您至少需要Oracle和SQL Server的单独SSDL,如果幸运的话,您也不需要单独的MSL(映射必须完全相同,如果您使用任何工具生成,可能不会发生数据库)。

因此,您始终需要至少部分EDMX文件用于第二个数据库并手动维护它。

如果您需要支持Oracle的数据库迁移,则必须从Oracle(或第三方)查找工具。例如,RedGate提供了支持SQL ServerOracle的架构迁移的工具。

Visual Studion Premium和Ultimate版本还提供了比较数据库模式的工具。它默认只支持SQL Server,但Toad Extensions也应该添加对Oracle的支持。

一旦拥有了这些工具,您只需将客户服务器上部署的模式与新模式进行比较,该工具就应该为您创建迁移脚本。

答案 1 :(得分:0)

我在这个主题上找到的最好的文章来自Paul Reynolds Blog。 尝试从第5部分到第9部分。

那里有很多关于Oracle的问题......非常有帮助!