我正在努力寻找能够覆盖我的实体自动化的解决方案。
执行流程是首先发生AutoMapping(使用约定),然后执行映射覆盖。
我的实体“Signature”已经被automapper映射(不要与Automapper库混淆!),我想更改某些列的db类型。
如果我这样做:
public class SignatureMap : IAutoMappingOverride<Signature>
{
public void Override(AutoMapping<Signature> mapping)
{
mapping.Map(x => x.SignType).CustomSqlType("character varying");
mapping.Map(x => x.Status).CustomSqlType("integer").Nullable();
}
}
尝试对表执行插入操作时,NpgsqlParameterCollection
(索引超出范围)会出现NHibernate错误。
这可能是因为mapping.Map
函数只是添加了另一个映射到集合而不是覆盖已经存在的映射(我检查了FluentNHibernate源代码)。
使用IAutoMappingOverride
覆盖Sql类型的正确方法是什么?
答案 0 :(得分:1)
您使用的覆盖语法没有任何问题,请确保:
1)实际参考配置中的覆盖映射:.UseOverridesFromAssemblyOf<SignatureMap>();
2)验证NHibernate是否按预期处理您的数据库模式。您可以使用类似new SchemaExport(config).Create(true, false);
的内容,这会将sql输出到控制台。
如果1和2都没问题,那么插入代码中可能出现问题。