这与我之前询问过的这个问题有关。为什么级联SaveUpdate会触发Delete语句?
在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行我申请的请求命令删除插件对象是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 -太ne-relationship-nhibernate-mapping
你有关系的双方更新?你是否在使用另一个问题中的元素的技巧?你能显示执行更改的代码吗? –
2013-02-17 11:28:50
根据您的“Cascade”设置,更新“Discounts”可能会导致删除。您在“Discounts”类的“DiscountsRequests”属性中设置了级联属性,设置为“保存,更新”?你能发布所有三张表的映射文件吗? – rae1 2013-02-19 05:15:04