1

IAutoMappingOverride<T>我有一个通过约定和类映射到旧版 Oracle 数据库的域模型。

因此,对于要写入数据库的每个实体,都存在一个IAutoMappingOverride<T>指定用于 PK 的序列的类:

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

现在,我目前正在尝试追踪一个错误,并希望使用不同的数据库测试该架构,特别是使用内存中的 SQLite 数据库。

问题是 SQLite 不支持序列。

是否可以全局覆盖配置?
类似于:“当 ID 由序列生成时,请改用身份”。

我不想做的是使用一组不同的IAutoMappingOverride<T>实现,因为大多数时候,ID 的映射并不是唯一发生的事情。

4

1 回答 1

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";
    } 
}
于 2013-01-31T11:43:23.590 回答