Сопоставить таблицу с составным ключом / внешним ключом с этой таблицей
Я пытаюсь сопоставить таблицу с составным ключом и сопоставить другую таблицу, которая ссылается на эту таблицу.
Предположим, эти таблицы:
ITEMDELIVERY
с соответствующими столбцами:ITEMDELIVERY_ID
DELIVERY_DATE
ITEMDELIVERYDETAIL
с соответствующими столбцами:ITEMDELIVERYDETAIL_ID
ITEMDELIVERY_ID
PARTITIONDATE
КолонныITEMDELIVERY.ITEMDELIVERY_ID
а такжеITEMDELIVERY.DELIVERY_DATE
вместе образуют ПК.
КолонныITEMDELIVERYDETAIL.ITEMDELIVERY_ID
а такжеITEMDELIVERYDETAIL.PARTITIONDATE
сформировать ФК изITEMDELIVERYDETAIL
вITEMDELIVERY
.
Как мне это отобразить?
Я попробовал следующее:
IAutoMappingOverride<ItemDeliveryDetail>
:
mapping.References(x => x.ItemDelivery)
.Columns("ITEMDELIVERY_ID", "PARTITIONDATE");
IAutoMappingOverride<ItemDelivery>
:
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)]