2013-08-07 156 views
1

我映射與NHibernate一類,但我用超過2個不同的數據庫相同的地圖的默認值。 這部作品的Sybase任何地方,但在SQLite不工作。映射:跨數據庫

這是我的地圖類:

public FooMap() 
{ 
    Property(x => x.Date, map => 
    { 
     map.Column(c => c.Default("now(*)")); 
     map.Generated(PropertyGeneration.Insert); 
     map.NotNullable(true); 
    }); 
} 

,這是映射:

public class Provider 
{ 
    public void AddMappings(ModelMapper mapper) 
    { 
     mapper.AddMappings(Assembly.GetAssembly(typeof(BaseMap)).GetExportedTypes().Where(x => x.Name.EndsWith("Map"))); 
    } 
} 

SQLite沒有NOW函數,所以這會導致錯誤當Hibernate試圖創建該表。

如何與數據庫根據我插入的默認值?

回答

0

我使用StructureMapMVC所以我這樣做:

var db = DependencyResolver.Current.GetService<Provider>(); 

if (db == null) 
{ 
    throw new NullReferenceException("Service Provider not found."); 
} 

if (db is SybaseProvider) 
{ 
    map.Column(c => c.Default("now(*)")); 
} 
else // SQLite 
{ 
    map.Column(c => c.Default("CURRENT_TIMESTAMP")); 
} 
map.Generated(PropertyGeneration.Insert); 
map.NotNullable(true); 

爲我工作。

0

記住,不同的數據庫中生成日期時間的默認值使用不同功能的軸承,我會採取在對象初始化時產生的值的方法。

您不妨看看Default Value does not work with DateTime and Fluent Nhibernate 1.2論壇主題它具有以下爲部分答案:

要指定屬性/字段的默認值,只是爲它分配一樣 你將一個正常的場;設置字段定義或 構造你的實體,需要沒有任何幻想。

按照這一辦法將允許具有不同的數據庫工作,而不必擔心他們是如何生成的日期時間的默認值。