C# 全局覆盖映射
我有一个通过约定和C# 全局覆盖映射,c#,nhibernate,fluent-nhibernate,C#,Nhibernate,Fluent Nhibernate,我有一个通过约定和IAutoMappingOverride类映射到旧Oracle数据库的域模型 因此,对于要写入数据库的每个实体,都存在一个IAutoMappingOverride类,该类指定用于PK的序列: mapping.Id(x => x.Id).GeneratedBy.Sequence("SQ_BATCHES_ID"); 现在,我正在尝试跟踪一个bug,并希望使用不同的数据库测试该模式,特别是内存中的SQLite数据库 问题是SQLite不支持序列 是否可以全局覆盖配置? 类似于
IAutoMappingOverride
类映射到旧Oracle数据库的域模型
因此,对于要写入数据库的每个实体,都存在一个IAutoMappingOverride
类,该类指定用于PK的序列:
mapping.Id(x => x.Id).GeneratedBy.Sequence("SQ_BATCHES_ID");
现在,我正在尝试跟踪一个bug,并希望使用不同的数据库测试该模式,特别是内存中的SQLite数据库
问题是SQLite不支持序列
是否可以全局覆盖配置?类似于“当ID由序列生成时,使用identity”
我不想做的是使用一组不同的
IAutoMappingOverride
实现,因为大多数情况下,ID的映射并不是唯一发生的事情。在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";
}
}
专用无效重写生成器(配置)
{
变量标识符=
config.ClassMappings.Select(x=>x.Identifier)
第()类
.其中(x=>x.IdentifierGenerators策略
.StartsWith(“序列”);
foreach(标识符中的var标识符)
{
标识符.IdentifierGeneratorProperties.Remove(“序列”);
identifier.IdentifierGeneratorStrategy=“identity”;
}
}
在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";
}
}
专用无效重写生成器(配置)
{
变量标识符=
config.ClassMappings.Select(x=>x.Identifier)
第()类
.其中(x=>x.IdentifierGenerators策略
.StartsWith(“序列”);
foreach(标识符中的var标识符)
{
标识符.IdentifierGeneratorProperties.Remove(“序列”);
identifier.IdentifierGeneratorStrategy=“identity”;
}
}