2011-04-19 45 views
4

我正在使用Nhibernate 3.0和Fluent Nhibernate來開發這個項目。我們正在使用SQL-Server 2008進行生產。對於版本控制,我們依靠SQL-Server端生成的時間戳。Fluent Nhibernate:如何根據底層數據庫更改字段映射?

最近我已經開始使用內存SQLite數據庫編寫存儲庫測試。不幸的是,SQLite無法生成時間戳,因此任何插入都會因違反約束而失敗。

我想將版本映射到Nhibernate託管的版本,當我編譯SQLite底層數據庫的映射時。傳達這一理念的代碼看起來大致是這樣的:

public class CommonClassMap<T> : ClassMap<T> where T:Entity 
{ 
    public CommonClassMap() 
    { 
     if (SQLITE) 
     { 
      Version(n => n.Version); 
     } 
     else 
     { 
      Version(n => n.Version).CustomSqlType("timestamp").UnsavedValue("null").CustomType("BinaryBlob"). 
       Generated.Always(); 
     } 

不幸的是,我沒能找到任何方式在運行時改變映射或讀取來自類映射基礎數據庫的信息。歡迎任何幫助。

回答

0

我所做的是爲不同的數據庫提供商分別提供ClassMap。然而,我沒有能夠在運行時更改它的要求,它在應用程序的整個生命週期中都配置一次。

你仍然可以保持你的系統,但我想你會保持自己的SQLITE和類似的東西。也不要過多地依賴運行在一個數據庫提供程序(如SQLite)上的代碼也會在其他提供程序上運行,因此您應該始終也包含SQL Server測試。

相關問題