MapTablewithCompositeKey/ForeignKeyoftheTablesurface。假设这些表:具有相关列的ITEMDELIVERY:ITEMDELIVERY_IDDELIVERY_DATEITEMDELIVERYDETAIL和相关列:ITEMDELIVERYDETAIL_IDITEMDELIVERY_IDPARTITIONDATE列ITEMDELIVERY.ITEMDELIVERY_ID和ITEMDELIVERY.DELIVERY_DATE一起形成PK。ITEMDELIVERYDETAIL.ITEMDELIVERY_ID和ITEMDELIVERYDETAIL.PARTITIONDATE列形成从ITEMDELIVERYDETAIL到ITEMDELIVERY的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:Invalidcastfrom'DateTime'to'Double'。在会话上调用SaveOrUpdate时。更新:我刚刚检查了生成的SQL,它显示NHibernate正在以某种方式切换值:INSERTINTOITEMDELIVERYDETAIL(ITEMDELIVERYDETAIL_ID,AMOUNT,PROCESSED_BY_REM,SINGLE_ITEM_PRICE,ITEMDELIVERY_ID,PARTITIONDATE,SupplierInvoice_id)VALUext,p1val_sequence。:p2,:p3,:p4,:p5)将ITEMDELIVERYDETAIL_ID返回到:nhIdOutParam中;:p0=20.12.201116:29:44[类型:双精度(0)],:p1=6[类型:日期时间(0)],:p2=21.12.201116:29:44[类型:双精度(0))],:p3=7[类型:Int32(0)],:p4=0[类型:DateTime(0)],:p5=19.12.201116:29:44[类型:Int32(0)],:nhIdOutParam=27638398[Type:Int32(0)]如你所见,参数完全乱了......它们应该是这样的::p0=6[Type:Double(0)],:p1=21.12.201116:29:44[类型:DateTime(0)],:p2=7[类型:Double(0)],:p3=0[类型:Int32(0)],:p4=19.12.201116:29:44[类型:DateTime(0)],:p5=27638398[类型:Int32(0)],:nhIdOutParam=NULL[类型:Int32(0)]我解决了这个问题。这种奇怪行为的原因是我有一个显式属性PartitionDate也被映射(mapping.Map(x=>x.PartitionDate).Column("PARTITIONDATE");)。这基本上意味着PARTITIONDATE列已被映射两次。以上就是C#学习教程:映射表与表的复合键/外键共享的所有内容。代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
