这与我之前提出的这个问题有关。
在Request
映射中,我将其设置为SaveUpdate
到期,在Discount
映射中,我将级联设置为无。
有两种情况:
首先是新要求和新折扣。创建两者,然后将折扣添加到请求并保存请求;这按预期工作。
下一个场景是新请求和现有折扣。这不正常,我不确定为什么。以下是测试中运行的 SQL 语句(省略值):
NHibernate: INSERT INTO Requests NHibernate: SELECT @@identity NHibernate: INSERT INTO DiscountRequests (DiscountId, RequestId) VALUES (3, 5); NHibernate: UPDATE Discounts NHibernate: DELETE FROM DiscountRequests WHERE DiscountId = 3;
最后一行是问题:它会返回并从第 3 行删除插入。我应用于 Request 对象的命令是session.Save(request);
,仅此而已。
是否有任何理由调用删除?
编辑:
更新代码
public void Add(Request request)
{
using (ISession session = NHibernateHelper.OpenSession())
{
using (ITransaction transaction = session.BeginTransaction())
{
session.Save(request);
transaction.Commit();
}
}
}
折扣映射
<join table="DiscountRequests" optional="true">
<key column="DiscountId" />
<many-to-one name="Request" column="RequestId" cascade="none" />
</join>
请求映射
<join table="DiscountRequests" optional="true">
<key column="RequestId" />
<many-to-one name="Discount" column="DiscountId" cascade="save-update" />
</join>
ttp://stackoverflow.com/questions/14837373/zero-to-one-relationship-nhibernate-mapping