【问题标题】:FluentNHibernate - overriding already existing automappingsFluentNHibernate - 覆盖已经存在的自动映射
【发布时间】:2013-03-09 15:27:30
【问题描述】:

我正在努力寻找能够覆盖我的实体的自动映射的解决方案。

执行流程是先发生AutoMapping(使用约定),然后执行映射覆盖。

我的实体“签名”已经被 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 类型的正确方法是什么?

【问题讨论】:

    标签: postgresql fluent-nhibernate fluent-nhibernate-mapping


    【解决方案1】:

    您使用的覆盖语法没有任何问题,请确保您:
    1) 在配置中实际引用您覆盖的映射:.UseOverridesFromAssemblyOf&lt;SignatureMap&gt;();
    2) 验证 NHibernate 是否按照您的预期处理您的数据库模式。您可以为此使用new SchemaExport(config).Create(true, false); 之类的东西,这会将sql输出到控制台。

    如果 1 和 2 都可以,那么问题可能出在您的插入代码中。

    【讨论】:

      猜你喜欢
      • 2012-04-14
      • 2012-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-25
      • 1970-01-01
      • 1970-01-01
      • 2011-08-19
      相关资源
      最近更新 更多