2

我正在将 Web 应用程序移植到 Entity Framework 4.5。我的主要目标是同时支持 MSSQL 和 Oracle 数据库,并能够以编程方式(在 Global.asax 中)告诉 ORM 以哪个数据源为目标。SQL 和 Oracle 模式在功能上显然是相同的;这是我们已经在生产中使用的一种方法,以及我们想要丢弃的另一个 ORM。

注意:我们正在测试它的机器有 Windows 8 Release Preview Build 8400 64 位、Visual Studio Professional 2012 RC 11.0.50706.0 和 .NET framework 4.5.50501。它不是标准的开发机器(其他有 XP 和 7 w/Visual Studio 2010 和 .NET 4),而是我们用来测试这些新技术的新机器。我不知道这些新技术是否有问题,还没有在“标准”开发机器上测试过。

精简版

我将在下面详细解释情况,但主要问题是:

  1. 在“添加新的 ADO.NET 实体数据模型”向导中,我看不到我安装的 ODP.NET 数据提供程序(见下文),因此我无法从 Oracle 数据库创建模型。为什么?此外,在“关于 Visual Studio”弹出窗口中,我没有看到列出的适用于 Visual Studio 的 Oracle 开发人员工具。我担心 Oracle 开发人员工具无法正常工作,但 Oracle 通用安装程序说一切都已正确安装(我重新启动了几次)。
  2. 实现此要求的最佳实践是什么?

长版

首先,我们从 SQL Server 数据库创建实体数据模型。到目前为止,一切都很好。

然后,我们从http://www.oracle.com/technetwork/topics/dotnet/utilsoft-086879.html安装了 ODAC 11.2 Release 4 和 Oracle Developer Tools for Visual Studio (11.2.0.3.0)

我已经成功地初始化了我们的模型,SIAEntities(它继承自 ObjectContext),使用:

            System.Data.EntityClient.EntityConnectionStringBuilder builder = new System.Data.EntityClient.EntityConnectionStringBuilder();
        builder.Metadata = "res://*/SIA.Models.SIAModelOracle.ssdl|res://*/Models.SIAModel.csdl|res://*/Models.SIAModel.msl";
        builder.ProviderConnectionString = "data source=***;persist security info=True;user id=***;password=***";
        builder.Provider = "Oracle.DataAccess.Client"; 
        SIAEntities db2 = new SIAEntities(builder.ConnectionString);

其中SIA.Models.SIAModelOracle.ssdl是一个自定义写入文件(嵌入式资源),它覆盖了 .edmx 的 SSDL 部分并具有以下修改:

  1. Provider根节点的属性Schema设置为Oracle.DataAccess.Client
  2. 所有数据类型名称都转换为它们的 Oracle 等效名称(datetime > date、nvarchar > varchar2、image > blob 等)
  3. 在 which 中添加的oracle.dataaccess.client节点web.config映射boolnumber(1,0)tinyintnumber(3,0)

执行第一个查询时出现错误(一个简单的SELECT):我将其跟踪为由于对数据库执行的查询中的双引号引起的,迫使它区分大小写。

通过手动编辑自定义 .ssdl 文件并将所有内容大写,我可以让 EF “看到”表格并识别一列接一列,但我没有将这个解决方案推得太远(因此在阅读整个表格之前停止),因为a) 它看起来不太干净 b) 我很难理解 .ssdl 和 .csdl/.msl 部分之间的链接,所以我不知道在哪里大写,在哪里不大写!

我正在考虑避免这种手动工作的另一个策略可能是尝试从 Oracle 模式生成一个单独的模型,并将这两个ObjectContexts 与另一个处理它们之间的选择的类包装起来,但正如问题 #2 所说,我做不到那。

4

2 回答 2

9

Edit: Oracle has now released a version (11.2.0.3.20) of Oracle Developer Tools for Visual Studio that works with Visual Studio 2012 and .NET 4.5. You'll need this version (or higher) of these tools for Visual Studio 2012 Entity Designer support and other Visual Studio 2012 integration. Get it here:

http://www.oracle.com/technetwork/topics/dotnet/utilsoft-086879.html

Edit #2: Visual Studio 2013 is supported beginning with version 12.1.0.1.2

FYI - I created a video to highlight some of the other features of these tools:

http://www.youtube.com/watch?v=68tlel4iJdM

Christian Shay

Oracle

于 2012-07-18T17:24:07.960 回答
1

Oracle 发布了支持 VS2012 和 .NET 4.5 的 ODP.NET。在此版本的文档中,我看不到他们太多。

于 2012-09-12T19:23:32.770 回答