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

时间:2012-07-18 15:23:45

标签: 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. 达到此要求的最佳做法是什么?
  3. 长版

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

    然后,我们从http://www.oracle.com/technetwork/topics/dotnet/utilsoft-086879.html安装了ODAC 11.2第4版和Visual Studio的Oracle开发人员工具(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部分,并进行了以下修改:

      设置为Provider 的根Schema节点的
    1. Oracle.DataAccess.Client属性
    2. 所有数据类型名称转换为其Oracle等效项(datetime> date,nvarchar> varchar2,image> blob等)
    3. oracle.dataaccess.client中添加的web.config节点将bool映射到number(1,0)tinyint映射到number(3,0)
    4. 执行第一个查询(简单SELECT)时出现错误:我将其跟踪为由于查询中的双引号对数据库执行,强制它区分大小写。< / p>

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

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

2 个答案:

答案 0 :(得分: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

的Oracle

答案 1 :(得分:1)

Oracle发布了ODP.NET with VS2012 and .NET 4.5 support。我对这个版本的文档方式并没有太多了解。