2008-09-21 54 views
0

我需要添加一個用戶定義的字段功能到使用NHibernate的asp.net c#應用程序。NHibernate的用戶定義字段

用戶必須能夠添加和從在「在飛行中」的系統中的若干對象刪除字段,優選沒有任何系統停機時間。

一個重要的制約因素是,數據庫架構不能由用戶改變 - 那就是,我可以加我需要的任何字段/表以支持此功能,但在用戶添加或刪除字段,他不能更改數據庫模式。

編輯:我也有進行排序和由用戶定義字段的值濾波器。

我知道如何做到這一點與鍵/值表C#/ SQL,但我不知道如何與NHibrenate(包括過濾和用戶分類定義的字段)

回答

4

這聽起來做到這一點就像你只想添加一個名稱/值屬性表一樣。

有一個表定義名稱(例如,ID,​​FIELDNAME,說明),而另一個限定值(例如ID,NAME_FK,OBJECT_FK,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>();