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