0

NHibernate を使用する asp.net c# アプリケーションにユーザー定義フィールド機能を追加する必要があります。

ユーザーは、できればシステムのダウンタイムなしで、システム内の複数のオブジェクトのフィールドを「その場で」追加および削除できる必要があります。

重要な制約の 1 つは、ユーザーがデータベース スキーマを変更できないことです。つまり、この機能をサポートするために必要なフィールド/テーブルを追加できますが、ユーザーがフィールドを追加または削除した場合、データベース スキーマを変更することはできません。 .

編集:ユーザー定義フィールドの値でソートおよびフィルタリングする必要もあります。

キー/値テーブルを使用して C#/SQL で行う方法は知っていますが、NHibrenate で行う方法がわかりません (ユーザー定義フィールドによるフィルタリングと並べ替えを含む)。

4

1 に答える 1

4

名前/値のプロパティ テーブルを追加したいだけのようです。

名前 (例: ID、FIELDNAME、DESCRIPTION) を定義する 1 つのテーブルと、値 (例: 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 に答える