2010-04-15 58 views
2

我的域實體每個都有一組「固定」屬性和一組可在運行時添加的「動態」屬性。我通過使用NHibernate的動態組件功能來處理這個問題。NHibernate:根據鑑別器映射不同的動態組件

public class Product { 
    public virtual Guid Id { get; } 
    public virtual string Name { get; set;} 
    public virtual IDictionary DynamicComponents { get; } 
} 

現在我有以下的情況

public class Customer { 
    public virtual Guid Id { get; } 
    public virtual string Type { get; set;} 
    public virtual IDictionary DynamicProperties { get; } 
} 

凡CustomerType是像「在線」「InPerson」。此外在線客戶具有動態特性「名稱」「ip地址」和InPerson客戶具有動態特性「名稱」「推銷員」

哪些客戶類型可用,並且它們的額外屬性是在用於在應用程序啓動時生成HBM文件的元數據中配置的。

我可以想出一些方法來使用中間DTO層將它們連接在一起,但在這種情況下,NHibernate中是否有任何支持?唯一的困難似乎是,所有不同的「客戶類型」都映射到同一個客戶類別。

回答

0

也許是一個愚蠢的問題,但爲什麼不使用客戶的兩個子類呢?

除此之外,它不是我立即清楚你是否希望NHibernate支持。你能澄清一下「NHibernate中這個場景的任何支持」是什麼意思,你希望NHibernate爲你做什麼?

+0

它們不能是子類,因爲它們是準動態的。在運行期間,我需要創建一個新類型的Person,包括重建映射。就像NHibernate允許你使用鑑別器將兩個子類映射到3個表一樣,我希望只有在鑑別器是某種方式時才使用某個映射。它的尷尬,我知道但必要給我們一些非常具體的限制,不幸的是NH是迄今爲止最好的ORM準動態或其他 – 2010-04-29 02:03:40

0

我想你可以使用動態屬性...在你的子類中找到解決辦法,請參閱動態特性,如IPAddress { get { return DynamicProperties["ipAddress"] as IPAddress; } }

對我來說有趣的部分是你如何在這樣一種方式,這些屬性映射的是是可擴展的...

你有沒有想出一個不同的解決方案?