在Visual Studio 2012 RC中看不到Oracle Data Provider for .NET

Pid*_*ddu 2 c# oracle entity-framework odp.net

我正在将一个Web应用程序移植到Entity Framework 4.5.我的主要目标是支持MSSQL和Oracle数据库,并能够以编程方式告诉ORM哪个数据源(在Global.asax中).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 Developer Tools.我担心Oracle开发人员工具无法正常工作,但Oracle Universal Installer表示所有内容都已正确安装(我重启了几次).
  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);
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

Chr*_*hay 9

编辑:Oracle现在发布了适用于Visual Studio的Oracle Developer Tools版本(11.2.0.3.20),该版本适用于Visual Studio 2012和.NET 4.5.您将需要此版本(或更高版本)的这些工具用于Visual Studio 2012 Entity Designer支持和其他Visual Studio 2012集成.在这里得到它:

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

编辑#2:从版本12.1.0.1.2开始支持Visual Studio 2013

仅供参考 - 我创建了一个视频来突出显示这些工具的其他一些功能:

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

Christian Shay

神谕