将使用实体框架在ASP.. NET MVC允许我的web项目工作在不同的数据库供应商



我一直在使用asp.net MVC web应用程序和实体框架与SQL Server 2008 R2。但是现在我们的一个客户要求我们使用Oracle 10g数据库。所以我的问题是,如果我做以下事情会发生什么:-

  1. 我创建相同的表,已经在sql server,在一个新的Oracle数据库。
  2. 我创建了一个新的ADO.net实体数据模型,并定义了Oracle数据库而不是SQL Server 2008 R2。并映射oracle表

所以我假设实体框架6将生成相同的model.edmx类,而不管数据库供应商。在这种情况下,我可以重用我的应用程序并在Oracle数据库上运行吗?

是这样的情况下,或者有更多的步骤要遵循,能够有我的asp.net mvc 5 web应用程序工作在两个SQL Server &;Oracle数据库而不用担心数据库供应商?请记住,我根本没有使用存储过程,所有的业务逻辑都是在Controller和Model类中实现的。

谢谢

理论上,是的——实体框架在一定程度上"抽象"了底层数据库。

但实际上,来自不同厂商的不同数据库是不同的——通常情况下,试图同时支持两种(或多种)数据库是不现实的。

我的方法是:

  • 在Oracle中创建与SQL Server
  • 相同的表结构
  • 将EDMX模型和特定于数据库的特性封装到一个单独的类库中——一个用于SQL Server,一个用于Oracle
  • 在此之上放置一个与数据库无关的层(例如"Repository Pattern"或其他方法)
  • 确保没有特定于数据库的特性从这个封装层"泄漏"出来
  • 配置你的应用程序,以便在启动时加载SQL Server或Oracle数据库核心程序集

使用这样的方法,您应该能够处理两个数据库—不是在运行时完全切换,但是您可以配置一个或另一个来使用。

我曾经使用Oracle 11代替SQL Server,发现Oracle 11没有Identity列的规定,我必须使用触发器实现相同的功能,并且我必须在插入时自动生成Identity,因为EF没有获取由触发器生成的Id值。所以理想情况下不应该有任何改变,但实际上需要很多细微的改变。

还以SQL Server中存在而Oracle中不存在的布尔字段为例。

——修改——

进一步阅读——

  1. 将多个数据库映射到EF
  2. 使用Oracle所需的EF更改
  3. ODP。净提供者

最新更新