2013-01-31 142 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"; 
    } 
}