25000了,散分,分享:.net里微软的O/R Mapping,并求一个程序
赫赫,标题很罗嗦……散分就不说了。先分享一下刚发现的.net中的O/R Mapping的技术吧。也许说O/R Mapping不是很贴切。嗯,按顺序说吧。
cuike519老大,去年5、1前后,推出了一个PowerGrid的开源的控件,它是一个DataGrid的扩充,实现了,只要提供连接字符串,和“数据源”,就可以自动列表、排序、分页的功能。这里“数据源”可以是Table名字、sql语句、或者stored procedure名。而所谓“只要提供连接字符串”,就是说cuike519兄实现了factory的设计模式。
PowerGrid很好,可惜只有Read的功能,不能Write,鉴于此我在做一个可以Select、Paging、Insert、Delete、Edit、Sort、Update、Filter的datagrid的扩充,暂定名SpiderSurfGrid。
为了insert/delete/edit/update,需要了解读到的datacolumn的信息,比如,如果是操作一个table,除了需要知道它的各个column的名字之外,还需要知道哪些是primary key。这个并不难,sql server的help里已经有了,对此我写了一个库,根据连接字符串缓存数据库的结构,前阵子分享了出来:《分享+开源:持久性数据访问层(athossmth)》http://community.csdn.net/Expert/TopicView.asp?id=3970150。
但是上面只是针对table,如果是普通的sql语句呢?比如select title t, author a from book,这里,title列和author列都重命名了,无从知道原来来自哪一个table。
无意之中,我发现,如果使用DataGrid的CreateColumnSet这个方法,那么,它已经确认了某个BoundColumn列是否ReadOnly!(有一个小小的准备工作,CreateColumnSet需要调用DataGrid的一个private的方法CreatePagedDataSource,这个可以用reflector读出代码自己写一个)
再跟踪下去,发现其实奥妙在我们每天都用的DataTable类!它有一个private的PropertyDescriptorCollection类型的成员,叫propertyDescriptorCollectionCache,这里面,已经从数据库中读到了,这个列,是否是PrimaryKey、是否是Identity类型、数据类型等等……
太神奇了,微软做了什么?这就是一个犀利的O/R Mapping的基础阿——分析任意的SQL查询语句!
赫赫,分享就到这里,再求一个程序。记得很久以前(1998年之前吧),有一个60k还是多大的(具体大小不记得,但是非常小),一个dos下的.com程序,模拟了3D的物体和飞行的视觉,还带音效,忽然想找,但是却不知如何找起——一个可以google的关键词都没有。那位朋友有还请分享一下,我的email是amy_seahawk@yahoo.com,谢谢。