全局覆盖映射

时间:2013-01-31 11:06:07

标签: c# nhibernate fluent-nhibernate

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

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

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

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

问题是SQLite不支持序列。

是否可以全局覆盖配置?
类似于以下内容:“当序列生成ID时,请使用标识”。

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

1 个答案:

答案 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";
    } 
}