2010-05-13 38 views
2

我使用Fluent NHibernate將二進制文件保存到Sql Server 2005 Db中。 但是,我正在使用SQLite來運行我的(僞)單元測試。NHibernate如何指定只在生產中的自定義SQL類型

我需要爲Ms Sql使用自定義Sql類型,但它會在SqlLite上引發錯誤。我可以使用什麼策略?

這是地圖文件:

public class BinaryFile 
{ 
public BinaryFile() 
    {   
     m.Map(x => x.BinaryData);//.CustomSqlType("varbinary(MAX)"); 
     m.Map(x => x.ContentType); 
     m.Map(x => x.FileName); 
     m.Map(x => x.FileSize); 
    } 
} 

回答

1

我不熟悉用流利的NHibernate的,但你可以使用是使用條件編譯,單程所以當你在調試模式下,它映射一個值,並在發佈時映射產品價值。

#if DEBUG   
      m.Map(x => x.BinaryData); 
#else 
     //Map production here   
#endif 
1

你可以爲每個配置使用不同的ClassMap類嗎?你可能不得不明確地將每個ClassMap添加到你的Fluent會話配置中,這會使它更加冗長,但這意味着你可以爲不同的數據庫使用不同的映射類。然後

public class BinaryFileMSSqlServer 
{ 
    public BinaryFile() 
    {   
     m.Map(x => x.BinaryData).CustomSqlType("varbinary(MAX)"); 
     m.Map(x => x.ContentType); 
     m.Map(x => x.FileName); 
     m.Map(x => x.FileSize); 
    } 
} 

public class BinaryFileSQLite 
{ 
    public BinaryFile() 
    {   
     m.Map(x => x.BinaryData); 
     m.Map(x => x.ContentType); 
     m.Map(x => x.FileName); 
     m.Map(x => x.FileSize); 
    } 
} 

你流利的會話映射會是這個樣子:

Fluently.Configure() 
    .Database(MsSqlConfiguration.MsSql2005 
    .ConnectionString(c => c 
     .FromAppSetting("connectionString")) 
    .Cache(c => c 
     .UseQueryCache() 
     .ProviderClass<HashtableCacheProvider>()) 
    .ShowSql()) 
    .Mappings(m => m.FluentMappings 
     .Add<BinaryFileMSSqlServer>() 
     .Add<...>() 
     .Add<...>()) 
    .BuildSessionFactory(); 

您需要在每個映射類的手工填寫。您還需要爲SQLite創建單獨的流暢配置,並在必要時使用SQLite特定的ClassMaps。

相關問題