我正在将一个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),但是我们用来测试这些新技术的新机器。我不知道这些新技术是否有问题,尚未在“标准”开发机上进行测试。
简短版
我将在下面详细解释这种情况,但主要问题是:
长版
首先,我们从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
节点的Oracle.DataAccess.Client
属性
oracle.dataaccess.client
中添加的web.config
节点将bool
映射到number(1,0)
和tinyint
映射到number(3,0)
执行第一个查询(简单SELECT
)时出现错误:我将其跟踪为由于查询中的双引号对数据库执行,强制它区分大小写。< / p>
通过手动编辑自定义.ssdl文件并大写所有内容,我可以让EF“看到”表并在另一个之后识别一列,但我没有将此解决方案推得太远(因此在开始阅读整个之前停止表)因为a)它看起来不太干净b)我很难理解.ssdl和.csdl / .msl部分之间的联系,所以我不知道在哪里大写,哪里不要!
我正在考虑避免这种手动工作的另一个策略是尝试从Oracle模式生成一个单独的模型,并将两个ObjectContext
包装在另一个类中,以处理它们之间的选择,但是问题#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。我对这个版本的文档方式并没有太多了解。