ORM既然是实体与关系数据库的映射,那就需要建立实体和关系数据库之间的基础数据,也可以称为元数据。简单的说就是表示类与表、列与属性(get、set方法)等等之间对应关系的数据。
ColumnInfo的ColumnMode是为了区分读写操作,ForeignTable是在查询时使用的。另外GetValue和SetValue用到了CodeProject上的FastInvoke,为了提高效率而又不至于搞得太复杂。
在查询时不可避免的会使用到join,因此增加了TableJoinInfo的信息。在TableJoin中,考虑到实际的使用情况,可以有2种方式,一种是“强类型”的,必须关联到某个TableInfo,而只需要指定外键;另一种是直接写数据库中的表名,当然关联条件就需要自己手动写了。第二种实际上并不是很好的做法,不过也提供了,使用的时候注意就可以。
目前考虑到的元数据就这些,至于其他的函数、存储过程、视图、触发器,都没有考虑,这些太过于依赖数据库了,不适合应用在OO的设计中。