目前遇到了一个大问题,不知道如何解决:
一个父类AbsProduct
需要根据实际情况进行继承:
但是,一些属性是根据客户的自定义创建的,并且能够提供给用户使用,例如:
用户可以增加房产、汽车、手机等类型,然而,
手机的属性有价格、是否有MP3、是否有蓝牙功能等。
汽车的属性有价格、排气量等。
在程序使用的过程中需要动态的创建属性,如何解决?

解决方案 »

  1.   

    我也时常想动态添加属性。比如我觉得DataTime缺少某个属性,如果能添加属性多好呀。可是好像很难办到。楼主的问题可以用一个变通的方法解决。可以使用预留字段的方法:创建每个表时都多创建20个字段。然后根据用户的需要显示每个字段的Label就可以了。
      

  2.   

    数据序化:开发过CRM的朋友应该都有体会,很多字段需要预留在数据库中,因为你不了解使用CRM系统的客户会有一些什么样的存储要求,如:CRM用户需要保存他客户的年龄,但是CRM系统设计过程中不可能为这样一个问题特意的加入这个存储字段,通常的做法是给一些空字段,用户使用的时候相应的对他进行初始化。但是导致的结果就是CRM的数据库惨不忍睹。更可怕的是,如果要进行软件升级的时候如果需要添加一些原本没有的字段,非常的麻烦,从实体类到数据库操作的存储过程都需要更改。而数据序化可以解决这个问题,其实当我第一次看到CS这种做法的时候是非常兴奋的:第一,实现了添加字段不需要重新写数据操作类,更不需要对相关的存储过程进行修改。第二,存储的字段很工整,全部值都保存在两个字段中,如图:先分析一下存储的数据,首先是PropertyNames字段,“EnableComments:S:0:4:ModerateComments:S:4:5:EnableRatings:S:9:4:” “EnableComments”其实是在实体类中定义的一个属性名称,“:”表示定义完毕,“S:0:4”表示在PropertyValues字段中的字符从0开始后面4位属于“EnableComments”的属性值,同理:“S:4:5”表示,从第四个字符开始,后面5个表示“ModerateComments”的属性值,以此类推可以获得PropertyNames所有的字段的值。(记得在Asp.net Forums时数据的序化是用Binary存储的,在CS中改为ntext可以对其进行搜索,解决序化后的数据搜索不便的问题。),关于如何进行序化等后续专题加以叙述。
      

  3.   

    http://ugoer.cnblogs.com/archive/2005/09/02/228682.htmlhttp://www.openlab.net.cn/forums/377804/ShowPost.aspx
      

  4.   

    可不可以先将可能出现的属性都添加进去,然后对没有这个属性的对象不赋值,或者设为NULL试试
      

  5.   

    to zlkingdom(风之悲伤) :
    谢谢你的关心,由于属性都是根据用户实时输入定义的,不可能都静态加进去
    另开新贴:现在接着昨天的问题,退一步进行技术求助,
    http://community.csdn.net/Expert/topic/4810/4810736.xml?temp=.4198114