我有一个通过约定和IAutoMappingOverride<T>
类映射到旧版Oracle数据库的域模型。
因此,对于要写入数据库的每个实体,都存在一个IAutoMappingOverride<T>
类,它指定用于PK的序列:
mapping.Id(x => x.Id).GeneratedBy.Sequence("SQ_BATCHES_ID");
现在,我正在尝试追踪一个错误,并希望使用不同的数据库测试该架构,特别是使用内存中的SQLite数据库。
问题是SQLite不支持序列。
是否可以全局覆盖配置?
类似于以下内容:“当序列生成ID时,请使用标识”。
我不想做的是使用一组不同的IAutoMappingOverride<T>
实现,因为大多数情况下,ID的映射并不是唯一发生的事情。
答案 0 :(得分: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";
}
}