[笔记]iBatisNET配置问题
题外话:前段时间,跟随潮流用了Linq(Linq to Sql),发现居然是MS Sql Server独占的,我这个气啊。。。。没办法在路上拣了个DBLinq,开始玩玩觉得不错,就加入到项目里用了,没想到这里bug,那里功能还没有提供,只是个空方法。。。。一路走来,全在吐血。。。。
后来公司技术顾问推荐用iBatisNET,不用学Linq语法或者其他什么ORM框架的语法,Sql和代码分离,支持多种数据库。感觉不错,从官方下了最新版的组件(下载),又从博友Anderson Cui那下载他修改后官方例子NPetShop(下载),在学习的过程中发现一些需要注意的问题:
1.如果连接的数据库不是被.NET内置支持的,记得把相应的动态链接库文件(比如:MySql.Data.dll)引入到Web层目录下,另外还要在目录下引入Castle.DynamicProxy.dll,IBatisNet.DataMapper.dll,IBatisNet.DataAccess.dll,IBatisNet.Common.dll。
2.Web层目录下的providers.config里记录了支持的数据库,及链接对应数据库需要的动态链接库文件,官方提供的配置有些使用动态链接库文件版本很老,你需要手动去修改,例:
修改前:
<provider
name="MySql"
description="MySQL, MySQL provider 1.0.7.30072"
enabled="false"
assemblyName="MySql.Data, Version=1.0.7.30072, Culture=neutral, PublicKeyToken=c5687fc88969c44d" connectionClass="MySql.Data.MySqlClient.MySqlConnection"
commandClass="MySql.Data.MySqlClient.MySqlCommand"
parameterClass="MySql.Data.MySqlClient.MySqlParameter"
parameterDbTypeClass="MySql.Data.MySqlClient.MySqlDbType"
parameterDbTypeProperty="MySqlDbType"
dataAdapterClass="MySql.Data.MySqlClient.MySqlDataAdapter"
commandBuilderClass="MySql.Data.MySqlClient.MySqlCommandBuilder"
usePositionalParameters="false"
useParameterPrefixInSql="true"
useParameterPrefixInParameter="true"
parameterPrefix="?"
allowMARS="false"
/>
修改后(加亮这个一定要注意,如果为false,是不能连接数据库成功的):
<provider
name="MySql"
description="MySQL, MySQL provider V5.2.2.0"
enabled="true"
assemblyName="MySql.Data, Version=5.2.2.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" connectionClass="MySql.Data.MySqlClient.MySqlConnection"
commandClass="MySql.Data.MySqlClient.MySqlCommand"
parameterClass="MySql.Data.MySqlClient.MySqlParameter"
parameterDbTypeClass="MySql.Data.MySqlClient.MySqlDbType"
parameterDbTypeProperty="MySqlDbType"
dataAdapterClass="MySql.Data.MySqlClient.MySqlDataAdapter"
commandBuilderClass="MySql.Data.MySqlClient.MySqlCommandBuilder"
usePositionalParameters="false"
useParameterPrefixInSql="true"
useParameterPrefixInParameter="true"
parameterPrefix="?"
allowMARS="false"
/>
3.新版的SqlMap配置文件,也做了细微的调整,如果属性书写不正确,可能导致一些问题:
例:DataAccess.dll为1.9.2,DataMapper.dll为1.6.2,其dao的配置文件的开头部分是这样的:
<daoConfig xmlns="http://ibatis.apache.org/dataAccess" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<context><daoSessionHandler>的name属性不再使用,改为使用id。
SqlMap配置文件也有变化:
<sqlMapConfig xmlns="http://ibatis.apache.org/dataMapper" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
4.数据库连接
以往这部分是SqlMap.config文件里的,iBatisNET升级后,这部分被移到dao.config内,详见NPetShop示例程序
这个算是初步体验。以后有心得再续上。