从Code MSDN上下载下来的EFOracleProvider不支持Oracle9i.但是,目前我所使用的还是Oracle9i。为此,对EFOracleProvider修改了以下,以便使其支持Oracle9i.

下面说说具体修改地方.(红色部分为添加或修改的代码部分)

一,修改EFOracleProvider

1,修改EFOracleProviderManifest.cs类文件,

internal const string TokenOracle9i = "9i";//add by xray2005

internal const string TokenOracle10g = "10g";

internal const string TokenOracle11g = "11g";

以下两个地方,不修改也是可以的.但考虑目前我主要是使用9i,所以也就修改成9i了.

private EFOracleVersion _version = EFOracleVersion.Oracle9i; //EFOracleVersion.Oracle11g;

private string _token = TokenOracle9i; //TokenOracle10g;

2,修改EFOracleVersion.cs类文件,如下代码所示:

namespaceEFOracleProvider

{

using System;

///

///This enum describes the current storage version

///

internal enum EFOracleVersion

{

Oracle9i = 9, //add by xray2005

///

///Oracle10g

///

Oracle10g = 10,

///

///Oracle 11g

///

Oracle11g = 11,

// higher versions go here

}

///

///This class is a simple utility class that determines the version from the

///connection

///

internal static class EFOracleVersionUtils

{

///

///Get the version from the connection.

///

/// current connection

/// version for the current connection

internal static EFOracleVersion GetStorageVersion(EFOracleConnection connection)

{

string serverVersion = connection.ServerVersion;

if (serverVersion.StartsWith("9."))

{

return EFOracleVersion.Oracle9i;//add by xray2005

}

else if (serverVersion.StartsWith("10."))

{

return EFOracleVersion.Oracle10g;

}

else if (serverVersion.StartsWith("11."))

{

return EFOracleVersion.Oracle11g;

}

throw new ArgumentException("Could not determine storage version; " +

"a valid storage connection or a version hint is required.");

}

internal static string GetVersionHint(EFOracleVersion version)

{

switch (version)

{

case EFOracleVersion.Oracle9i:

return EFOracleProviderManifest.TokenOracle9i;//add by xray2005

case EFOracleVersion.Oracle10g:

return EFOracleProviderManifest.TokenOracle10g;

case EFOracleVersion.Oracle11g:

return EFOracleProviderManifest.TokenOracle11g;

default:

throw new ArgumentException("Could not determine storage version; " +

"a valid storage connection or a version hint is required.");

}

}

internal static EFOracleVersion GetStorageVersion(string versionHint)

{

if (!string.IsNullOrEmpty(versionHint))

{

switch (versionHint)

{

case EFOracleProviderManifest.TokenOracle9i:

return EFOracleVersion.Oracle9i;//add by xray2005

case EFOracleProviderManifest.TokenOracle10g:

return EFOracleVersion.Oracle10g;

case EFOracleProviderManifest.TokenOracle11g:

return EFOracleVersion.Oracle11g;

}

}

throw new ArgumentException("Could not determine storage version; " +

"a valid storage connection or a version hint is required.");

}

internal static bool IsVersionX(EFOracleVersion storageVersion)

{

return storageVersion == EFOracleVersion.Oracle9i || storageVersion == EFOracleVersion.Oracle10g ||

storageVersion == EFOracleVersion.Oracle11g;//add by xray2005

}

}

}

二,使用EFOracleProvider

修改完毕后,编译一下.如果是自己下载的源代码编译的,那么编译后的EFOracleProvider自动已经在GAC注册了.如果是手动注册EFOracleProvider到GAC,那么命令如下:

gacutil –I“EFOracleProvider.dll”

其中gacutil.exe位于:系统盘符号:\Program Files\Microsoft SDKs\Windows\v6.0A\bin下面。

接下来,我们需要做的就是,把这个EFOracleProvider添加到Machine.config中.

第一步,找到Machine.config文件.该文件的位置在:

系统盘符号:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG下面.

第二步,用打开Machine.config文件,在DbProviderFactories配置节点,增加EFOracleProvider的配置,如下所示:

description=".Net Framework Data Provider for Odbc"

type="System.Data.Odbc.OdbcFactory, System.Data, Version=2.0.0.0,

Culture=neutral, PublicKeyToken=b77a5c561934e089" />

description=".Net Framework Data Provider for OleDb"

type="System.Data.OleDb.OleDbFactory, System.Data, Version=2.0.0.0,

Culture=neutral, PublicKeyToken=b77a5c561934e089" />

invariant="System.Data.OracleClient" description=".Net Framework Data

Provider for Oracle" type="System.Data.OracleClient.OracleClientFactory,

System.Data.OracleClient, Version=2.0.0.0, Culture=neutral,

PublicKeyToken=b77a5c561934e089" />

invariant="System.Data.SqlClient" description=".Net Framework Data

Provider for SqlServer" type="System.Data.SqlClient.SqlClientFactory,

System.Data, Version=2.0.0.0, Culture=neutral,

PublicKeyToken=b77a5c561934e089" />

invariant="System.Data.SqlServerCe.3.5" description=".NET Framework Data

Provider for Microsoft SQL Server Compact"

type="System.Data.SqlServerCe.SqlCeProviderFactory,

System.Data.SqlServerCe, Version=3.5.0.0, Culture=neutral,

PublicKeyToken=89845dcd8080cc91" />

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" />

第三步,保存即可.

接下来,简单的介绍一下,如何使用这个EFOralceProvider.

第1步:在命令行窗口,将目录定位到提示符, 系统盘符:\WINDOWS\Microsoft.NET\Framework\v3.5.如下所示(是我电脑上的目录):

第2步,输入相应的生成参数.如下图所示:

将“data source=test;user id=xray;password= 123”成你自己的对应的参数即可.

确定之后,就可以看到生成的结果了,同时会有写信息出来,如下示:

至此,EdmGen就为我们生成需要的文件.生成的文件如下所示:

lTestEFModel.csdl

lTestEFModel.msl

lTestEFModel.ssdl

lTestEFModel.ObjectLayer.cs

lTestEFModel.Views.cs

然后,通过EdmGen2工具, 使用刚刚生成的TestEFModel .csdl, TestEFModel .msl, TestEFModel .ssdl三个文件来生成一个模型.

命令如下:

Edmgen2.exe /toedmx TestEFModel.csdl TestEFModel.msl TestEFModel.ssdl

确定之后,该工具就会为我们生成一个TestEFModel.edmx文件了.

然后,把这个文件加入到我们的项目中,同时修改项目的App.Config文件连接字符串,如下所示:

connectionString="provider=EFOracleProvider;

metadata=res://*/TestEFModel.csdl|res://*/TestEFModel.ssdl|res://*/TestEFModel.msl;

Provider Connection String='data source=test;user id=xray;password=1111'"

providerName="System.Data.EntityClient" />

最后保存.

至此,修改EFOracleProvider并使用,介绍完毕。

最后提供几个连接,以方便大家学习研究:

oracle数字类型ef映射,Entity Framework 学习中级篇5—使EF支持Oracle9i - ♂风车车.Net - 博客园...相关推荐

  1. Entity Framework 学习中级篇—EF支持复杂类型的实现

    http://www.cnblogs.com/xray2005/archive/2009/06/01/1493661.html 本节,将介绍如何手动构造复杂类型(ComplexType)以及复杂类型的 ...

  2. Entity Framework 学习中级篇1—EF支持复杂类型的实现

    本节,将介绍如何手动构造复杂类型(ComplexType)以及复杂类型的简单操作. 通常,复杂类型是指那些由几个简单的类型组合而成的类型.比如:一张Customer表,其中有FristName和Las ...

  3. Entity Framework学习中级篇

    1-EF支持复杂类型的实现 本节,将介绍如何手动构造复杂类型(ComplexType)以及复杂类型的简单操作. 通常,复杂类型是指那些由几个简单的类型组合而成的类型.比如:一张Customer表,其中 ...

  4. Entity Framework 学习中级篇3—存储过程(中)

    目前,EF对存储过程的支持并不完善.存在以下问题: l         EF不支持存储过程返回多表联合查询的结果集. l         EF仅支持返回返回某个表的全部字段,以便转换成对应的实体.无法 ...

  5. Entity Framework 学习高级篇2—改善EF代码的方法(下)

    本节,我们将介绍一些改善EF代码的方法,包括编译查询.存储模型视图以及冲突处理等内容. l         CompiledQuery 提供对查询的编译和缓存以供重新使用.当相同的查询需要执行很多遍的 ...

  6. Entity Framework 学习高级篇1—改善EF代码的方法(上)

    本节,我们将介绍一些改善EF代码的相关方法,如NoTracking,GetObjectByKey, Include等. l         MergeOption.NoTracking 当我们只需要读 ...

  7. Entity Framework 学习中级篇2—存储过程(上)(转)

    目前,EF对存储过程的支持并不完善.存在以下问题: l         EF不支持存储过程返回多表联合查询的结果集. l         EF仅支持返回返回某个表的全部字段,以便转换成对应的实体.无法 ...

  8. Entity Framework 学习中级篇4—存储过程(下)

    在EF中,各个实体的插入.更新和删除也都通过使用存储过程来完成,以便提高点性能.这个类似于数据集.其步骤是:先定义存储过程,然后在VS的可视化设计器,设置存储过程映射即可. 下面,以为Supplier ...

  9. Entity Framework 学习中级篇4—存储过程(下)(转)

    在EF中,各个实体的插入.更新和删除也都通过使用存储过程来完成,以便提高点性能.这个类似于数据集.其步骤是:先定义存储过程,然后在VS的可视化设计器,设置存储过程映射即可. 下面,以为Supplier ...

最新文章

  1. 【Interfacenavigation】XML中的字体(27)
  2. 华为云计算之储存基础知识
  3. 网易邮箱开通imap服务器,网易邮箱率先全面默认开通IMAP服务
  4. JMetro版本8.6.11和11.6.11已发布
  5. 【笔记】JAVA 中国象棋游戏 部分源码
  6. ASP.NET 安全认证
  7. android网络框架
  8. TUXEDO配置常见问题及解决方法
  9. 各种求最大公约数的函数
  10. 移动光猫获取管理员密码过程记录(吉比特TEWA-272G)
  11. 吴翰清:云计算安全是“皇帝的新装”么?
  12. 钱塘湖春行 白居易 唐代
  13. 华栖云携阿里云首发云上电视台服务:致力于把电视台搬上云端
  14. 计算机操作系统实训心得总结,计算机操作系统安全实训心得总结
  15. Swift5代码添加约束
  16. 记录 vue-admin-template 中 npm install 错误解决办法
  17. python学习-Dya13-函数
  18. JavaScript 指南 - 使用对象
  19. RC低通滤波原理(笔记)
  20. 富友集团由盈转亏:收购事项完成后未变更,旗下富友支付多次被罚

热门文章

  1. python入门系列:对象引用、垃圾回收、可变性
  2. [php入门] 4、HTML基础入门一篇概览
  3. Nodejs架构之json空处理
  4. 使用 Pandas 分析 Apache 日志
  5. Office 365身份认证管理-添加并验证联合认证域
  6. oa 系统后期安装服务
  7. python db2查询_如何将DB2查询转换为python脚本
  8. 519. 随机翻转矩阵
  9. 关于长寿_FreeCodeCamp可以帮助您更长寿
  10. 在加利福尼亚州投资于新餐馆:一种数据驱动的方法