0

我正在努力尋找能夠覆蓋我的實體的自動映射的解決方案。FluentNHibernate - 覆蓋已經存在的自動映射

執行流程是首先發生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(); 
    } 
} 

我得到NHibernate的錯誤與NpgsqlParameterCollection(索引超出範圍)。

這可能是因爲mapping.Map函數只是向集合添加另一個映射,而不是覆蓋已存在的映射(我檢查了FluentNHibernate源代碼)。

什麼是使用IAutoMappingOverride重寫Sql類型的正確方法?

回答

1

有什麼不對您使用替代語法,請確保您:
1)實際引用您的overrided映射在配置:.UseOverridesFromAssemblyOf<SignatureMap>();
2)驗證NHibernate的對待你的DB模式如您所願。你可以使用像new SchemaExport(config).Create(true, false);這樣的東西,這會輸出sql到控制檯。

如果1和2都可以,那麼問題可能出現在您的插入代碼中。