C# 使用NHibernate的用户定义字段

C# 使用NHibernate的用户定义字段,c#,nhibernate,user-defined-fields,C#,Nhibernate,User Defined Fields,我需要向使用NHibernate的asp.net c#应用程序添加一个用户定义的字段功能 用户必须能够“动态”添加和删除系统中多个对象的字段,最好不需要任何系统停机 一个重要的约束是,用户不能更改数据库模式——也就是说,我可以添加支持此功能所需的任何字段/表,但当用户添加或删除字段时,他不能更改数据库模式 编辑:我还必须根据用户定义字段的值进行排序和筛选 我知道如何在c#/SQL中使用键/值表来执行此操作,但我不知道如何使用NHibrenate(包括按用户定义的字段进行筛选和排序)听起来您只是想

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

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

一个重要的约束是,用户不能更改数据库模式——也就是说,我可以添加支持此功能所需的任何字段/表,但当用户添加或删除字段时,他不能更改数据库模式

编辑:我还必须根据用户定义字段的值进行排序和筛选


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

听起来您只是想添加一个名称/值属性表

一个表定义名称(例如ID、FIELDNAME、DESCRIPTION),另一个表定义值(例如ID、name\u FK、OBJECT\u FK、value)

让用户向名称表添加新行,以添加新属性,并通过向值表添加行、向名称表添加外键以及要将其附加到的任何对象来添加值

然后,视图可以查询针对对象\u FK设置键的值表,并使用名称\u FK引用属性名称

编辑:NHibernate不会将新值视为实际属性,但如果将它们映射为集合,则应该能够使用ICriteria进行查询和筛选:

IList<MyProp> props = session
  .CreateCriteria(typeof(MyProp))
  .Add(Expression.Eq("ObjectName", "Widget"))
  .Add(Expression.Eq("Name", "Size"))
  .List<MyProp>();
IList props=会话
.CreateCriteria(类型(MyProp))
.Add(Expression.Eq(“ObjectName”、“Widget”))
.Add(Expression.Eq(“名称”、“大小”))
.List();

听起来您只是想添加一个名称/值属性表

一个表定义名称(例如ID、FIELDNAME、DESCRIPTION),另一个表定义值(例如ID、name\u FK、OBJECT\u FK、value)

让用户向名称表添加新行,以添加新属性,并通过向值表添加行、向名称表添加外键以及要将其附加到的任何对象来添加值

然后,视图可以查询针对对象\u FK设置键的值表,并使用名称\u FK引用属性名称

编辑:NHibernate不会将新值视为实际属性,但如果将它们映射为集合,则应该能够使用ICriteria进行查询和筛选:

IList<MyProp> props = session
  .CreateCriteria(typeof(MyProp))
  .Add(Expression.Eq("ObjectName", "Widget"))
  .Add(Expression.Eq("Name", "Size"))
  .List<MyProp>();
IList props=会话
.CreateCriteria(类型(MyProp))
.Add(Expression.Eq(“ObjectName”、“Widget”))
.Add(Expression.Eq(“名称”、“大小”))
.List();