EFOracleProvider在Visual Studio 2010下的解决方案


最近准备着手在Visual Studio2010和.Net 4环境下进行一些Silverlight的项目开发,由于公司使用Oracle 10g数据库系统,因此我们需要有一个额外的ADO.NET Entity 
Framework for Oracle Provider。

 

Microsoft在官方网站上向我们免费提供了一个叫做EFOracleProvider的Sample用于在Visual Studio中创建一个连接到Oracle数据库的EDMX实体文件,但是源代码是在Visual Studio 2008 SP1 (.Net 3.5 SP1) 的环境下编译的。为了能够在Visual Studio 2010(.Net 4)的环境中使用,我们需要将这个DLL安装到CLR 4.0的环境中。之前由于错误的将该dll注册到.Net 3.5的运行时环境CLR 2.0中,因此在编译项目时一直提示"指定的数据提供程序在配置文件中找不到,或者无效",也无法通过生成的实体类读取到数据库中的数据。

 

下面是我在Visual Studio 2010中解决该问题的具体方法:

 

1. 下载项目源代码,并使用Visual Studio 2010打开解决方案。同时在Visual Studio 2010的项目属性页中将项目的Target Framework 改为4.0,删除生成事件中的“后期生成事件命令行”。(原命令行用于将dll注册到.net 3.5 的运行时),重新生成EFOracleProvider.dll。

  在安装了Visual Studio 2010或者.Net 4 SDK的情况下,我们有一个新的用于.Net 4的gacutil.exe位于C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\,运行gacutil.exe /?命令就能看到类似“Microsoft (R) .NET Global Assembly Cache Utility.  Version *.*.*.*”这样的工具版本信息。注意,在C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bin\目录下也有一个gacutil.exe工具,但是这个是.Net 3.5版本的。

 

2. 在C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\目录下运行cmd,输入如下命令行注册:
gacutil.exe -if EFOracleProvider.dll

 

3. 将EFOracleProvider的信息在.Net 4的Machine.config文件中进行声明。打开%windir%\Microsoft.NET\Framework\v4.0.30319\Config\machine.config,Ctrl+F找到<DbProviderFactories>标签,将如下信息添加到他的子节点:

<add name="EF Oracle Data Provider" invariant="EFOracleProvider" description="EF Provider for Oracle" type="EFOracleProvider.EFOracleProviderFactory,EFOracleProvider, Version=1.0.0.0, Culture=neutral, PublicKeyToken=def642f226e0e59b" />

 

通过以上3个步骤之后,EFOracleProvider就已经成功的在我们的计算机上安装了,此时,我们已经能够通过EFOracleProvider来正常的访问Oracle数据库了。如果我们需要为Oracle数据库表生成EDMX实体集,可以继续按照如下的步骤:

4. 在%windir%\Microsoft.NET\Framework\v4.0.30319\目录下运行cmd,输入如下命令行生成数据库实体文件:

edmgen.exe /provider:EFOracleProvider /mode:fullgeneration /connectionstring:"data source=XE;user id=edmuser;password=123456" /project:NorthwindEFModel

当运行结束之后,这将为我们生成*.csdl, *.msl, *.ObjectLayer.cs, *.ssdl, *.Views.cs一共5个文件。

5. 使用记事本打开*.ssdl,查找并替换其中的store:Schema="dbo"和Schema="dbo"为空。

6. 从http://archive.msdn.microsoft.com/EdmGen2下载EdmGen2.exe工具。使用如下命令行生成EDMX实体文件。

EdmGen2.exe /toedmx *.csdl *.ssdl *.msl

 
呃.我们是把EFOracleProvider的信息复制到4.0中:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config 中<DbProviderFactories>节点下eforacleProvider的信息复制到C:\Windows\Microsoft.NET\Framework\v4.0.30319\CONFIG\machine.config
PS.
我们也在用EFOracleProvider,
性能不必说了,确实很低,而且有个严重的bug:分页时,会先分页再排序(使用LINQ).

至此,我们已经完成了从Oracle数据库生成EDMX实体文件并使用EFOracleProvider提供的功能访问其中的数据这整个过程。


目前Oracle官方发布的最新版本ODAC组件已经可以支持ADO.NET EF和Linq To Entities,建议同学们使用ODAC来代替EFOracleProvider访问Oracle 数据库,毕竟EFOracleProvider还是有太多的局限性。

参考:
Sample Entity Framework Provider for Oracle
http://code.msdn.microsoft.com/EFOracleProvider

.NET Framework 4.0 中如何把一个程序部署到全局应用缓存(GAC)
http://www.cnblogs.com/ghj1976/archive/2010/04/26/1721179.html

动刀EFOracleProvider,使其支持char、timestamp(x)等类型 
http://blog.csdn.net/fzzsh/archive/2010/06/30/5703744.aspx

Using EF Oracle Sample Provider with EDM Designer
http://blogs.msdn.com/b/jkowalski/archive/2008/10/24/using-ef-oracle-sample-provider-with-edm-designer.aspx

EdmGen2.exe
http://archive.msdn.microsoft.com/EdmGen2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值