NHibernate代码解析 - SqlTypes
NHibernate-1.2.0.Beta3-debug
这个目录下面的类是对数据库数据类型的封装。
![](https://www.cnblogs.com/images/cnblogs_com/riccc/nhibernate_code_sqltypes0.gif)
1. SqlType
在NHibernate中所有的数据库数据类型都用SqlType或者它的子类封装。SqlType其实就是对DbType进行一次比较简单的包装,并扩 展三个属性:Length、Scale、Precision。作用:DbType是个枚举,封装成类之后方便程序使用,另外仅仅一个DbType信息量不 足,通过SqlType类扩展三个属性。
2. BinarySqlType、StringSqlType...
这几个继承自SqlType的类作用不大,只是为了进一步定义这几种具有Length属性的类型。
3. SqlTypeFactory
SqlType在NHibernate里的作用比较小。
在Driver类中创建、设置IDbParameter对象时,会使用到SqlType。大部分的Driver也只是通过SqlType获取DbType属性,只有SqlClientDriver用到Length、Scale、Precision属性。
Dialect的主要作用是根据实体属性和配置生成DB的Schema,在这些类的一些方法中有用到SqlType。
实体xml配置文件中,column节点有个sql-type属性,这个属性跟SqlType类是没有关系的。
SqlType只是数据库数据类型的表示类,以DbType为基础。它并不需要处理不同的数据库之间的数据类型转换,这个工作由各类数据库的 ADO.NET Provider处理了。例如对应DbType枚举,MySql有个MySqlDbType,MySqlParameter类有DbType和 MySqlDbType两个属性,设置其中任意一个,都会自动转换并设置好另外一个。这个处理从MySql .Net Provider源代码或者用Reflector可以看出来。
这个目录下面的类是对数据库数据类型的封装。
![](https://www.cnblogs.com/images/cnblogs_com/riccc/nhibernate_code_sqltypes0.gif)
1. SqlType
在NHibernate中所有的数据库数据类型都用SqlType或者它的子类封装。SqlType其实就是对DbType进行一次比较简单的包装,并扩 展三个属性:Length、Scale、Precision。作用:DbType是个枚举,封装成类之后方便程序使用,另外仅仅一个DbType信息量不 足,通过SqlType类扩展三个属性。
2. BinarySqlType、StringSqlType...
这几个继承自SqlType的类作用不大,只是为了进一步定义这几种具有Length属性的类型。
3. SqlTypeFactory
SqlType在NHibernate里的作用比较小。
在Driver类中创建、设置IDbParameter对象时,会使用到SqlType。大部分的Driver也只是通过SqlType获取DbType属性,只有SqlClientDriver用到Length、Scale、Precision属性。
Dialect的主要作用是根据实体属性和配置生成DB的Schema,在这些类的一些方法中有用到SqlType。
实体xml配置文件中,column节点有个sql-type属性,这个属性跟SqlType类是没有关系的。
SqlType只是数据库数据类型的表示类,以DbType为基础。它并不需要处理不同的数据库之间的数据类型转换,这个工作由各类数据库的 ADO.NET Provider处理了。例如对应DbType枚举,MySql有个MySqlDbType,MySqlParameter类有DbType和 MySqlDbType两个属性,设置其中任意一个,都会自动转换并设置好另外一个。这个处理从MySql .Net Provider源代码或者用Reflector可以看出来。