Hiscoder

HisCoder

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: :: 管理 ::

LINQ to Oracle 之 DbLinq2007

        用惯了Visual Studio 2008的LINQ to SQL,突然转到使用Oracle,还真有些不适应,念代码之悠悠,独伧然而涕下呀。好在现在已有不少其他工具能够支持LINQ to Oracle,那咱么就试着想办法将他们和Visual Studio 2008整合起来。

        从功能到易用性上都十分强大的当推Devart公司开发的dotConnect for Oracle,该工具可以和VS 2008完美集成,对LINQ语言的解释能力比较强,执行速度也不错,但由于其是收费产品,需要购买使用。

        这里想介绍的是一款免费的开源工具——DbLinq2007,它支持LINQ provider for Oracle、PostgreSQL、MySQL、Ingres、SQLite、Firebird和SQL Server,支持C#3.0。可以从以下地址下载最新版本:

http://code.google.com/p/dblinq2007/downloads/list

        这里使用的版本是DbLinq-0.20.1。下载包分为两个,一个是DbLinq-0.20.1.zip可执行文件包,另一个是DbLinq-0.20.1-src.zip源代码文件包。第一个压缩包里面有一个可执行文件DbMetal.exe,通过它可以生成可供Visual Studio 2008使用的LINQ类文件(.cs)。该程序提供两种连接Oracle数据的方式,一种是provider=Oracle,这种方式是通过调用系统中的System.Data.OracleClient.OracleConnection类来实现数据库的连接,另一种是provider=OracleODP,使用的则是Oracle.DataAccess.Client.OracleConnection。如果采用第二种连接方式,需要当前目录下有Oracle.DataAccess.dll这个文件,该文件在第一个压缩包里面没有,在第二个压缩包的lib文件夹下面可以找到,将它拷贝到DbMetal.exe的目录下就可以了。如果采用第一种连接方式,类似的,当然也可以在系统文件夹下将System.Data.OracleClient.dll拷贝到DbMetal.exe的目录下,该文件在C:\Windows\Microsoft.NET\Framework\v2.0.50727目录下面可以找到。不过还有一种更简单的方式,就是修改DbMetal.exe.config文件,在provider name="Oracle"一项中,加入该DLL对应的版本信息就可以了,比如改成如下格式:

<provider name="Oracle" dbLinqSchemaLoader="DbLinq.Oracle.OracleSchemaLoader, DbLinq.Oracle" databaseConnection="System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

修改之后,就可以开始执行DbMetal.exe文件了,命令格式如下:

dbmetal -provider="Oracle" -conn="Data Source=ORCL;User Id=SCOTT;Password=TIGER" -database="SCOTT" -namespace="OracleDAL" -code="OracleLinq.cs" -sprocs –schema

(该命令可在DOS命令窗口下,进入到DbLinq-0.20.1解压目录,然后再执行)

        顺便说明一下,命令中provider指的是连接方式,如上所述,这里表示采用第一种连接方式,conn表示Oracle数据库的连接字符串,不用过多解释,database表示要导出为LINQ的表格所属的用户,这里表示要导出属于SCOTT用户的表格,code表示想要生成的C#类文件名,其他可选参数的说明请参照DbMetal.exe的Help说明。测试所使用的数据库的版本是Oracle 10g 10.2.0.3。

        如果不出问题的话,将会在DbLinq-0.20.1解压目录下生成OracleLinq.cs文件,将该文件导入到Visual Studio 2008的项目中,就可以向往常一样,通过LINQ语言来读写Oracle数据库了!

        最后需要说明一下,该工具对复杂LINQ语言的解释还存在一些问题,毕竟很难做到像微软的LINQ to SQL那样完美,不过对于简单应用,使用该工具还是比较方便的,如果是复杂的应用或者是对性能质量要求比较高的应用,还是建议大家采用那些收费工具或者干脆直接写SQL吧!

posted on 2012-03-02 11:44  HisCoder  阅读(529)  评论(0编辑  收藏  举报