使用 NHibernate 的用户定义字段
我需要将用户定义的字段功能添加到使用 NHibernate 的 asp.net c# 应用程序。
用户必须能够“即时”在系统中的多个对象中添加和删除字段,最好没有任何系统停机时间。
一个重要的限制是用户无法更改数据库模式 - 也就是说,我可以添加支持此功能所需的任何字段/表,但是当用户添加或删除字段时,他无法更改数据库模式。
编辑:我还必须按用户定义字段的值进行排序和过滤。
我知道如何在 c#/SQL 中使用键/值表执行此操作,但我不知道如何使用 NHibrenate 执行此操作(包括按用户定义的字段进行过滤和排序)
I need to add a user defined fields feature to an asp.net c# application that uses NHibernate.
The user must be able to add and remove fields from several objects in the system "on the fly", preferably without any system downtime.
One important constraint is that the database schema can't be changed by the user - that is, I can add whatever fields/tables I need to support this feature but when the user adds or removes a field he can't change the database schema.
EDIT: I also have to sort and filter by the values of the user defined fields.
I know how to do it in c#/SQL with a key/value table, but I don't know how to do it with NHibrenate (including filtering and sorting by the user defined fields)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
听起来您只想添加名称/值属性表。
有一个表定义名称(例如 ID、FIELDNAME、DESCRIPTION),另一个表定义值(例如 ID、NAME_FK、OBJECT_FK、VALUE)。
让用户向 NAME 表添加新行以添加新属性,并通过向 VALUE 表添加行、外键到 NAME 表以及您想要将其附加到的任何对象来添加值。
然后,您的视图可以查询针对 OBJECT_FK 键控的 VALUE 表,并使用 NAME_FK 来引用属性名称。
编辑:NHibernate 不会将新值视为实际属性,但如果将它们映射为集合,您应该能够查询和查看它们。 使用 ICriteria 进行过滤:
It sounds like you just want to add a name/value properties table.
Have one table defining the name (e.g. ID, FIELDNAME, DESCRIPTION) and another defining the value (e.g. ID, NAME_FK, OBJECT_FK, VALUE).
Have the user adding new rows to the NAME table to add a new property and adding values by adding rows to the VALUE table, foreign-keyed to the NAME table and whatever object you want to attach it to.
Your view can then query the VALUE table keyed against the OBJECT_FK and use the NAME_FK to reference the property name.
Edit: NHibernate won't see the new values as actual properties, but if you map them as collections you should be able to query & filter using ICriteria: