有关自定义字段的解决方案,希望大家踊跃讨论!
问题提出:
    有时我们在某个project中可能会遇到这种情况,就是有一个User表,但由于User表中的某些字段可能在设计时并未考虑到,由于扩展的需要,在系统release后必须加入某些字段,这种情况我们
往往不会去修改原有的系统,而是在设计时就预留了一个自定义字段的功能。以下是我对该问题的解决思路,可能还存在一些问题,权当抛砖引玉。
    基本思想就是将列转化为列,增加一个表CustomField(PkId,FieldName,FieldDataType,FieldDefaultValues,ControlType);
UserCustomField(PkId,UserPkId,CustomFieldPkId,FieldValue)
如果这样设计,可能会遇到的问题:
1.在新增user页面,需要动态加入自定义字段所对应的控件到指定的位置,并且布局须与原页面一致
2.编辑时需动态载入自定义字段对应的控件,并赋予其初始值
可能还会有些其他问题,希望大家指出问题,并提出最终的解决方案,也好让之后碰到类似问题的人能有章可循。

解决方案 »

  1.   

    其中UserCustomField是User和CustomField之间的一个关系表
      

  2.   

    不得已,用用激将法。
    难道CSDN没有高手了吗?
      

  3.   

    在ADO.NET下,你跟本就可以动态生成更新表语句,所以你就完全可以用一个类去编辑一个动态的表(字段名称与字段数量完全不固定)
    在.NET FrameWork下,你完全可以动态生成任何组件(甚至动态编译代码),所以你可以根据你的后台配置动态布局你的用户界面.我现在正在使用的一个类,你可以任意指定一个具有主键的表给他,他就可以对该表进行任意的添加修改删除操作,各个字段的编辑组件可以任意指定(类型和位置大小等)
      

  4.   

    因为采用的是NHibernate框架,所以动态更改表基本上不可能。因为那样不仅要更改表,还要更改配置文件及其关系等。并且还要考虑多国语言的配置,所以我是觉得应该提出一个更好的解决方案,感谢若尘的回答!
      

  5.   

    功能需求才是决定你采用什么技术的关键,既然NHibernate框架达不到你的需求,那么你还用他干嘛!我现在的设计完全基于.NET自带组件,可以达到应对多变的需求而不用修改源代码,基本就是修改配置就可以了.