我有一套流暢的NHibernate約定,其中大多數是獨立的數據庫。然而,有一對夫婦,其是DBMS依賴這樣一個字符串屬性:在流利NHibernate的數據庫特定約定
Public Sub Apply(ByVal instance As IPropertyInstance) Implements IConvention(Of IPropertyInspector, IPropertyInstance).Apply
instance.CustomSqlType("VARCHAR2(50 BYTE)")
End Sub
真的,我只是用一種慣例這樣一個DB代(即對象第一個發展)。這對Oracle來說工作得很好,但是我希望使用內存中的SQLite數據庫進行單元測試,顯然這個約定不會工作,因爲SQLite沒有VARCHAR2類型。
有沒有人有任何好的建議或參考他們如何配置流利NHibernate在這種情況下。
目前我正在考慮採用一系列獨立於數據庫的通用約定,然後在子目錄/命名空間中依賴這些約定。然後我會有一些配置,允許我指定一個自定義的ITypeSource組件,它可以提取所有通用約定以及與特定DBMS相關的通用約定,例如SqlConventionTypeSource,OracleConventionTypeSource ...
親切的問候, 瑞安。
感謝Aaronaught的迴應。 –
供參考;我使用Castle.Facilities.NHibernateIntegration庫來配置NHibernate和Windsor IoC。這樣,所有使用NHibernate的服務/演示者都可以使用ISessionManager作爲必需/可選的類依賴項來創建。當我解決一個服務時,Windsor將注入ISessionManager的具體實現。基本上,我並不需要太擔心使用該工具的會話管理(例如,每次請求打開會話),它使我能夠對嘲笑ISessionManager進行良好的單元測試。 –
我可以通過設施IConfigurationBuilder接口修改會話工廠的默認配置,在這裏我使用慣例使用自動映射流暢地配置NHibernate會話工廠。我需要告訴FNH AutoPersistenceModel哪裏可以找到這些約定,因爲它們相當複雜,定義明確且不可能永遠不會改變,所以這些約定很適合重複使用。這回到了我的原始問題,即我的一些約定是DB特定的(即用於生成模式的約定)。 –