Richie

Sometimes at night when I look up at the stars, and see the whole sky just laid out there, don't you think I ain't remembering it all. I still got dreams like anybody else, and ever so often, I am thinking about how things might of been. And then, all of a sudden, I'm forty, fifty, sixty years old, you know?

NHibernate代码解析 - SqlTypes

    NHibernate-1.2.0.Beta3-debug

    这个目录下面的类是对数据库数据类型的封装。
   
    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可以看出来。

posted on 2007-01-22 22:46  riccc  阅读(1132)  评论(1编辑  收藏  举报

导航