具有该表的复合键/外键的映射表

我试图映射一个具有复合键的表,并映射另一个引用该表的表。

假设这些表:

  1. 带有相关列的ITEMDELIVERY
    1. ITEMDELIVERY_ID
    2. DELIVERY_DATE
  2. ITEMDELIVERYDETAIL及相关列:
    1. ITEMDELIVERYDETAIL_ID
    2. ITEMDELIVERY_ID
    3. PARTITIONDATE

ITEMDELIVERY.ITEMDELIVERY_IDITEMDELIVERY.DELIVERY_DATE一起构成PK。
ITEMDELIVERYDETAIL.ITEMDELIVERY_IDITEMDELIVERYDETAIL.PARTITIONDATE形成从ITEMDELIVERYDETAILITEMDELIVERY的FK。

我该如何映射?

我尝试了以下方法:

IAutoMappingOverride

 mapping.References(x => x.ItemDelivery) .Columns("ITEMDELIVERY_ID", "PARTITIONDATE"); 

IAutoMappingOverride

 mapping.CompositeId().KeyProperty(x => x.Id, "ITEMDELIVERY_ID") .KeyProperty(x => x.DeliveryDate, "DELIVERY_DATE"); 

但是这不起作用,导致System.InvalidCastException: Invalid cast from 'DateTime' to 'Double'. 在会话上调用SaveOrUpdate时。

更新:

我刚刚检查了生成的SQL,它显示NHibernate以某种方式切换值:

 INSERT INTO ITEMDELIVERYDETAIL (ITEMDELIVERYDETAIL_ID, AMOUNT, PROCESSED_BY_REM, SINGLE_ITEM_PRICE, ITEMDELIVERY_ID, PARTITIONDATE, SupplierInvoice_id) VALUES (hibernate_sequence.nextval, :p0, :p1, :p2, :p3, :p4, :p5) returning ITEMDELIVERYDETAIL_ID into :nhIdOutParam; :p0 = 20.12.2011 16:29:44 [Type: Double (0)], :p1 = 6 [Type: DateTime (0)], :p2 = 21.12.2011 16:29:44 [Type: Double (0)], :p3 = 7 [Type: Int32 (0)], :p4 = 0 [Type: DateTime (0)], :p5 = 19.12.2011 16:29:44 [Type: Int32 (0)], :nhIdOutParam = 27638398 [Type: Int32 (0)] 

如你所见,参数完全混乱……
它们应该是这样的:

 :p0 = 6 [Type: Double (0)], :p1 = 21.12.2011 16:29:44 [Type: DateTime (0)], :p2 = 7 [Type: Double (0)], :p3 = 0 [Type: Int32 (0)], :p4 = 19.12.2011 16:29:44 [Type: DateTime (0)], :p5 = 27638398 [Type: Int32 (0)], :nhIdOutParam = NULL [Type: Int32 (0)] 

我解决了这个问题。 这种奇怪行为的原因是我有一个显式属性PartitionDate也被映射( mapping.Map(x => x.PartitionDate).Column("PARTITIONDATE"); )。
这基本上意味着PARTITIONDATE列已映射两次。