NHibernate的用户定义字段

时间:2008-09-21 09:06:17

标签: c# nhibernate user-defined-fields

我需要在使用NHibernate的asp.net c#应用程序中添加用户定义的字段功能。

用户必须能够“动态”添加和删除系统中多个对象的字段,最好不要出现任何系统停机时间。

一个重要的限制是用户无法更改数据库模式 - 也就是说,我可以添加支持此功能所需的任何字段/表,但是当用户添加或删除字段时,他无法更改数据库架构。

编辑:我还必须按用户定义字段的值进行排序和过滤。

我知道如何在带有键/值表的c#/ SQL中执行此操作,但我不知道如何使用NHibrenate(包括按用户定义的字段进行过滤和排序)

1 个答案:

答案 0 :(得分:4)

听起来您只想添加名称/值属性表。

有一个表定义名称(例如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>();