gpt4 book ai didi

NHibernate 将 0 保存到多对一列而不是 null

转载 作者:行者123 更新时间:2023-12-04 01:31:37 24 4
gpt4 key购买 nike

我有一个 Donations 表,其中有一个与 Campaigns 表相关的 CampaignID 列。如果事件未用于此捐赠,我需要在 CampaignID 列中插入 0 而不是 Null。

我在 Donations 表中的映射如下所示:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="true">
<class name="Donation,Entities" lazy="true" table="Donations" dynamic-update="true" >
<id name="DonationID" column="PledgeID" type="Int64">
<generator class="native" />
</id>
<many-to-one name="FundraisingCampaign" class="Campaign, Entities" column="CampaignID" lazy="proxy" not-found="ignore" cascade="none" />

在我保存到数据库之前,我检查我的捐赠实体上的事件实体是否为空。如果是这样,那么我将其设置为一个新的事件实体并像这样设置事件 ID = 0。

    if (null == donation.FundraisingCampaign)
{
donation.FundraisingCampaign = new Campaign() {CampaignID = 0};
}

问题是我收到一条错误消息“对象引用了一个未保存的 transient 实例 - 在刷新之前保存 transient 实例。”尝试保存时。

我不明白为什么它关心我的 Campaign 对象上的任何东西而不是 CampaignID,因为我有 cascade="none"它不应该尝试将任何东西保存到 Campaign 表。

我被当前系统强制在那里设置一个 0 而不是 Null,所以保存 Null 不是一个选项。

最佳答案

尝试从 DB 加载 DB 标识为 0 的 Campaign 对象。然后它将成为一个完全持久的对象。然后您应该能够设置它并坚持捐赠。

如果这样做,您需要更改 Campaign 对象的 ID 属性映射。 Nh 无法确定您的临时事件对象是在此处创建的:

new Campaign() {CampaignID = 0};

实际上是一个分离的对象。你应该做的是在你的映射中添加一个“未保存的值”,比如 -1。现在 Nh 可以区分数据库身份 ID 为 0 的有效分离事件和 ID 为 -1 的临时新事件。然后记得将新创建的事件的 Id 设置为 -1。

关于NHibernate 将 0 保存到多对一列而不是 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/774498/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com