Пользовательские поля с помощью NHibernate - PullRequest
0 голосов
/ 21 сентября 2008

Мне нужно добавить пользовательскую функцию полей в приложение asp.net c #, которое использует NHibernate.

Пользователь должен иметь возможность добавлять и удалять поля из нескольких объектов в системе "на лету", желательно без какого-либо простоя системы.

Одним из важных ограничений является то, что схема базы данных не может быть изменена пользователем, то есть я могу добавить любые поля / таблицы, которые мне нужны для поддержки этой функции, но когда пользователь добавляет или удаляет поле, он не может изменить схема базы данных.

РЕДАКТИРОВАТЬ: Я также должен сортировать и фильтровать по значениям пользовательских полей.

Я знаю, как сделать это в c # / SQL с таблицей ключ / значение, но я не знаю, как это сделать с NHibrenate (включая фильтрацию и сортировку по пользовательским полям)

1 Ответ

4 голосов
/ 21 сентября 2008

Похоже, вы просто хотите добавить таблицу свойств имя / значение.

Имеют одну таблицу, определяющую имя (например, ID, FIELDNAME, DESCRIPTION), а другую - значение (например, ID, NAME_FK, OBJECT_FK, VALUE).

Пользователь должен добавить новые строки в таблицу NAME, чтобы добавить новое свойство и добавить значения, добавив строки в таблицу VALUE, внешний ключ к таблице NAME и любой объект, к которому вы хотите присоединить его.

Ваше представление может затем запросить таблицу VALUE, связанную с OBJECT_FK, и использовать NAME_FK для ссылки на имя свойства.

Редактировать: NHibernate не будет видеть новые значения как фактические свойства, но если вы отобразите их как коллекции, вы сможете запросить и отфильтровать, используя ICriteria:

IList<MyProp> props = session
  .CreateCriteria(typeof(MyProp))
  .Add(Expression.Eq("ObjectName", "Widget"))
  .Add(Expression.Eq("Name", "Size"))
  .List<MyProp>();
...