NHibernate的用户定义字段
时间:2020-03-06 14:30:11 来源:igfitidea点击:
我需要向使用NHibernate的asp.net复制中添加用户定义的字段功能。
用户必须能够"即时"从系统中的几个对象添加和删除字段,最好没有任何系统停机时间。
一个重要的约束是用户不能更改数据库模式,也就是说,我可以添加支持此功能所需的任何字段/表,但是当用户添加或者删除字段时,他不能更改数据库模式。
编辑:我还必须通过用户定义的字段的值进行排序和筛选。
我知道如何在C#/ SQL中使用键/值表来执行此操作,但是我不知道如何使用NHibrenate进行操作(包括按用户定义的字段进行过滤和排序)
解决方案
听起来我们只想添加一个名称/值属性表。
用一个表定义名称(例如ID,FIELDNAME,DESCRIPTION),用另一个表定义值(例如ID,NAME_FK,OBJECT_FK,VALUE)。
让用户向NAME表添加新行以添加新属性,并通过向VALUE表添加行,对NAME表进行外键操作以及要将其添加到的任何对象来添加值。
然后,视图可以查询以OBJECT_FK为键的VALUE表,并使用NAME_FK引用属性名称。
编辑:NHibernate不会将新值视为实际属性,但是如果将它们映射为集合,则应该能够使用ICriteria查询和过滤:
IList<MyProp> props = session .CreateCriteria(typeof(MyProp)) .Add(Expression.Eq("ObjectName", "Widget")) .Add(Expression.Eq("Name", "Size")) .List<MyProp>();