我有以下对象模型(基于我无法改变的遗留表结构)。
public class Store
Contact BillingContact {get;set;}
Contact SetupContact {get;set;}
ISet<Contact> Contacts {get;set;}
在这种情况下,当我创建新商店时,我还会在“联系人”列表中添加新联系人。我还想将该联系人设置为BillingContact和SetupContact上的引用。然后将该批次保存为单个事务。如果我保存商店而不设置参考BillingContact和SetupContact,一切都很好。但是当我设置这些属性时,NHibernate尝试在Insert之后执行更新以更新引用,并且因为实际上尚未插入Store而出现错误。
看起来我可能不得不使用触发器或存储过程,但我希望有一种NHibernate方式。
正在运行的SQL是
INSERT INTO CONTACTS (Id, CompanyId, Name, etc.) Values (1234, NULL, "My Contact", etc.) NOTE: 1234 was retrieved from a sequence
然后
INSERT INTO company (Id, BillingContactId, SetupContactId) Values (8946, 1234, 1234)
然后 - 错误是因为这个
UPDATE CONTACTS SET CompanyId=8946 WHERE CUSTOMER_ID = 1234 AND TimeStamp = xxx
由于插件尚未提交,因此最终语句失败。
错误是 行被另一个事务更新或删除(或未保存的值映射不正确)[Customer#1234]
答案 0 :(得分:0)
您需要为这些对Save-Update的引用配置级联。这意味着,当您保存或更新实体时,它将“通过级联”保存引用。
http://wiki.fluentnhibernate.org/Getting_started
在 Mappings 部分中,有一个级联的示例。