c# - 将具有复合键/外键的表映射到该表

标签 c# nhibernate fluent-nhibernate

我正在尝试映射一个具有复合键的表并映射另一个引用该表的表。

假设这些表:

  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.PARTITIONDATEITEMDELIVERYDETAIL 形成 FK至 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在 session 上。

更新:

我刚刚检查了生成的 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 列被映射了两次。

关于c# - 将具有复合键/外键的表映射到该表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8477759/

相关文章:

c# - 来自 Connection 的希伯来语

postgresql - 基于 NHibernate 公式的属性 + PostgreSQL 区间

c# - 好的/简单的 asp.net mvc 应用程序与流利的 nhibernate

c# - Silverlight 中的随机动画

c# - 解析无效的 XML C#

c# - C# 3 中具有接口(interface)继承(co(ntra)-variance?)的泛型类型推断

silverlight - 如何将 NHibernate 和 DTO 与 RIA 服务结合使用

nhibernate - 验证 block 与 Nhibernate.Validator

c# - NHibernate:防止刷新触发未初始化的集合

mysql - 为什么我使用 nhibernate 的 asp.net-mvc 站点会停止更新和删除?