您的位置:首页 > 其它

使用Castle.ActiveRecord的注意事项之三:继承

2008-10-29 14:26 375 查看
学习继承,纯属意外,数据库的设计者硬要把A,B,C三个完全不同的对象存在同一张表中,并振振有词说A,B,C三个对象的内容比较类似,都有Name,Address等属性,加一个Type标识就可以了。事后证明这个是数据库的一大败笔,因为这么项目中有D对象,D对象与A对象是一对一关系,与B对象是一对多关系,与C对象是多对多关系......
这可苦了我了,按照一个表一个对象的思路,原来A,B,C作为一个对象 O,里面有个Type属性,当Type为1的时候为A,为2的时候为B,为3的时候为C。D对象中,几个属性:O(表示A),OList(表示B),OList2(表示C)。开发的过程中,开发人员都问我,D里面的那些O到底表示什么? 当要搜索出所有的A对象,结果ActiveBase类带的find方法会搜索出所有的O对象。 而且由于前期存储数据的马虎,很多人在存的时候没有注明Type,导致数据库里面的数据一片混乱.......

幸好后来看到了关于Hibernate继承的文章,一看Castle里面ActiveRecord果然也有。

一、单表关联继承、用于多个对象使用同一表的情况。

对于上面的情况,设计了

Code

new public static AVO[] FindAll()

{

return ((AVO[])(ActiveRecordBase.FindAll(typeof(AVO))));

}

new public static AVO Find(int aId)

{

return ((AVO)(ActiveRecordBase.FindByPrimaryKey(typeof(AVO), aId)));

}

new public static AVO[] FindAllByProperty(string prop,Object o)

{

return ((AVO[])(ActiveRecordBase.FindAllByProperty(typeof(AVO),prop,o)));

}
本文原于2008年03月22日 00:50:00发于http://blog.csdn.net/appgqp/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: