如何映射ICompositeUserType

我正在将一个简单的工作演示从nhibernate移植到流畅。 我现有的nhibernate映射是这样的:

              

我试图创建equlivilant ClassMap

 internal class InvoiceMap : ClassMap { public InvoiceMap() { Id(x => x.Id); Map(x => x.Customer); Map(x => x.Number); Map(x => x.TotalValue) .CustomType(typeof (MoneyCompositeUserType)) .Column("TotalValue_Amount") .Column("TotalValue_Currency"); } } 

但我得到错误:

—> NHibernate.MappingException:属性映射列数错误:MoneyHibernate.Invoice.TotalValue类型:MoneyHibernate.MoneyCompositeUserType

所以我认为两次声明列不是正确的方法吗?

您正在以正确的方式执行此操作,但是,您需要在手动声明列之前将Columns.Clear()添加到映射中,如下所示:

 Map(x => x.TotalValue) .CustomType(typeof (MoneyCompositeUserType)) .Columns.Clear() .Columns.Add("TotalValue_Amount", "TotalValue_Amount"); 

否则,除了用于复合用户类型映射的列集合之外,nHibernate还将附加新列名称(因此错误的列数exception)。