.Net 的 ORM框架 在MySql上试过几个. DBLinq, 这个类似于Linq to Sql, BUG太多了; Linq to Entity, 这个也试了,很多特性不支持,写起来很不方便。
论到兼容性、稳定性,最后还是觉得BLToolkit最优.
BLToolkit提供了对数据库访问的多层次封装。可以用ADO.Net的封装,可以用Entity ORM, 也可以用Linq, 使用起来非常方便。
而且它支持各种各样的数据库
Class | Provider Name | Namespace | Vendor |
---|---|---|---|
AccessDataProvider | Access | System.Data.OleDb | Microsoft |
OdbcDataProvider | Odbc | System.Data.Odbc | Microsoft |
OleDbDataProvider | OleDb | System.Data.OleDb | Microsoft |
OracleDataProvider | Oracle | System.Data.OracleClient | Microsoft (deprecated by Microsoft in FW 4.0) |
SqlDataProvider | Sql | System.Data.SqlClient | Microsoft |
DB2DataProvider | DB2 | IBM.Data.DB2 | IBM |
FdpDataProvider | Fdp | FirebirdSql.Data.FirebirdClient | Firebird |
InformixDataProvider | Informix | IBM.Data.Informix | IBM |
MySqlDataProvider | MySql | MySql.Data.MySqlClient | Sun Microsystems |
OdpDataProvider | ODP | Oracle.DataAccess.Client | Oracle |
SqlCeDataProvider | SqlCe | System.Data.SqlServerCe | Microsoft |
SQLiteDataProvider | SQLite | System.Data.SQLite | SQLite.org |
SybaseAdoDataProvider | SybaseAdo | System.Data.OleDb | Support for DataDirect Sybase ADO Provider |
SybaseDataProvider | Sybase ASE | Sybase.Data.AseClient |
|
准备好Mysql, 安装好 Mysql connector , http://www.mysql.com/downloads/connector/net/
现在的最新版本是 6.3.6, 最好不要使用 Windows 32bit那个版本,Windows 2008服务器可是64位的哦。
安装完 MySql Connector后, 你可以将MySql.Data.dll拷贝到你的网站目录下,或者干脆直接加入到GAC里面去。
然后下载BLToolkit Lib, http://bltoolkit.net , 你可以选择下载源代码 或者直接使用它编译好的dll
引入工程后,就可以在*.config里面进行配置了
- <configuration>
- <configSections>
- <section name="bltoolkit" type="BLToolkit.Configuration.BLToolkitSection, BLToolkit.4"/>
- </configSections>
- <bltoolkit>
- <dataProviders>
- <add type="BLToolkit.Data.DataProvider.MySqlDataProvider, BLToolkit.4" />
- </dataProviders>
- </bltoolkit>
- <connectionStrings>
- <add name="Default" connectionString="Server=127.0.0.1;Port=3306;Database=vms;Uid=root;Pwd=123456;Charset=utf8;Allow User Variables=True;Allow Zero Datetime=false" providerName="MySql.Data.MySqlClient"/>
- </connectionStrings>
- <runtime>
- <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
- <dependentAssembly>
- <!-- Redirect MySQL Connector -->
- <assemblyIdentity name="MySql.Data"
- publicKeyToken="c5687fc88969c44d"
- culture="neutral" />
- <bindingRedirect oldVersion="5.0.0.0-6.3.0.0"
- newVersion="6.3.6.0"/>
- </dependentAssembly>
- </assemblyBinding>
- </runtime>
- </configuration>
这里需要注意,如果你是直接使用 编译好的BLToolkit dll, 那么上面配置中的 assembly redirection那节很可能是需要的,因为你机器上的MySql.Data.dll版本可能和BLToolkit要求的版本不一致。 你也可以自己编译BLToolkit来避免这个问题。
我从它的SVN上获取到最新的版本,用VS2010编译通过了,这样简单些。
现在就配置完了。
---------
关于SQL语句中变量的问题
MySql有一种老式的变量命名风格 ?XXX 和 新式的变量风格 @XXXX,而BLToolkit.Data.DataProvider.MySqlDataProvider中却是默认使用老式的变量风格
如果你想使用 新式的变量,像下面一样
- public abstract class MachineAccessor : DataAccessor<MachineTable>
- {
- [ScalarSource(ScalarSourceType.AffectedRows)]
- [SqlQuery(@"UPDATE machine SET LastAccessTime = NOW(), LastAccessIP = @lastAccessIP, FirstAccessTime = IFNULL(FirstAccessTime, NOW()) WHERE SerialNumber = @serialNumber")]
- public abstract int UpdateLastAccess(string serialNumber, string lastAccessIP);
- }
那么你就需要修改 MySqlDataProvider的默认配置, 将它的构造函数直接改成
- static MySqlDataProvider()
- {
- ConfigureNewStyle();
- }