2011-05-12 60 views
1

我在尋找到一個項目中使用NHibernate和我對如何最好地實現以下情形的問題時,使用FluentNhibernate 1.0.0.593,和NHibernate 2.1.0.4000用流利的NHibernate和自動映射使用EnumTypes

我的表看起來像這樣:

DeviationLog: 
    Id uniqueidentifier 
    DeviationType uniqueidentifier 
    IncomingMessageId uniqueidentifier 

DeviationType: 
    Id uniqueidentifier 
    DeviationTypeCategory uniqueidentifier 
    DeviationMessage nvarchar(255) 

DeviationTypeCategory: 
    Id uniqueidentifier 
    DeviationTypeCategoryName nvarchar(255) 

我目前正在使用自動映射與約定。

當我創建偏差的情況下,我想能夠做到像下面這樣:

var deviation = new Deviation{DeviationType=DeviationEnum.NoMatchMobileNumber}; 

現在據我所知枚舉只支持整數類型,所以這是不行的沒有其他方法。我正在考慮用這個字典,比如Dictionary<DeviationEnum,Guid>,我也懷疑我可能需要利用UserTypeConvention<T>來做這個工作。

任何人都有經驗分享?

回答

0

我傳統上做的是使用一個自定義的IUserType類,它將在所涉及的枚舉和它將如何被持久化之間進行轉換。但是,這需要每個枚舉類型的自定義IUserType。

+0

你能夠粘貼一個例子,或指向其他可能有用的資源? – andersr 2011-05-13 09:12:44

+0

我會看看NHibernate的源代碼中的YesNoType,它具有類似的功能,將bool轉換爲字符串字段中的「是」或「否」來保存它。通過使用不同的枚舉數,我最終創建了一個抽象類,以便每個枚舉只有一個具有映射的子類。 – Rich 2011-05-13 17:59:59