我们正在尝试构建一个用于同时使用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在数据库创建和迁移方面再次失败了.
关于我们如何实现这一目标的任何建议?
谢谢
解决方法
sql Server和Oracle都无法使用单个EDMX. EDMX由CSDL(实体定义),SSDL(数据库定义),MSL(这些定义之间的映射)三部分组成. SSDL必须始终以具体数据库为目标,因此您至少需要Oracle和sql Server的单独SSDL,如果您很幸运,您也不需要单独的MSL(映射必须完全相同,如果您使用任何工具生成,则可能不会发生数据库).
因此,您始终需要至少部分EDMX文件用于第二个DB并手动维护它.
如果您需要支持Oracle的数据库迁移,则必须从Oracle(或第三方)查找工具.例如,RedGate提供了支持SQL Server和Oracle的模式迁移的工具.
Visual Studion Premium和Ultimate版本还提供了用于比较数据库模式的工具.它默认只支持sql Server,但Toad Extensions也应该添加对Oracle的支持.
一旦拥有了这些工具中的任何一个,您只需要将客户服务器上部署的模式与新模式进行比较,该工具就应该为您创建迁移脚本.