0

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

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

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

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

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

4

1 回答 1

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>();
于 2008-09-21T09:43:23.000 回答