2013-01-31 138 views
1

我有一個域模型,通過約定和IAutoMappingOverride<T>類映射到遺留Oracle數據庫。全局覆蓋映射

因此,對於每一個將要被寫入到數據庫實體,存在一個IAutoMappingOverride<T>類,它指定的順序爲PK使用:

mapping.Id(x => x.Id).GeneratedBy.Sequence("SQ_BATCHES_ID"); 

現在,我目前正在追查一個錯誤,並希望用不同的數據庫測試該模式,特別是使用內存中的SQLite數據庫。

問題是SQLite不支持序列。

是否有可能全局覆蓋配置?
大致如下:「當ID由序列生成時,請使用身份代替」。

我不想做的是使用一組不同的IAutoMappingOverride<T>實現,因爲大部分時間,ID的映射不是唯一發生的事情。

回答

1

ExposeConfiguration中,您可以使用生成的配置完成大部分任務。即使更換髮電機:

private void OverrideGenerators(Configuration config) 
{ 
    var identifiers = 
     config.ClassMappings.Select(x => x.Identifier) 
       .OfType<SimpleValue>() 
       .Where(x => x.IdentifierGeneratorStrategy 
          .StartsWith("sequence")); 
    foreach (var identifier in identifiers) 
    { 
     identifier.IdentifierGeneratorProperties.Remove("sequence"); 
     identifier.IdentifierGeneratorStrategy = "identity"; 
    } 
}