NHibernate未从联接表中删除记录,正在将其更新为null

NHibernate未从联接表中删除记录,正在将其更新为null,nhibernate,join,mapping,Nhibernate,Join,Mapping,我的映射(编辑并简化以保护不那么无辜的人): 这样可以很好地工作,并自动将新地址插入地址表。 但是,如果我想删除地址: //// Previously loaded customer with attached address cli.Address = null; //// Save repository, commit transaction 这样,NHibernate就不会从Addresses表中删除该行,而是更新该行,将其所有字段设置为null(Id除外) 我的映射出了什么问题?根

我的映射(编辑并简化以保护不那么无辜的人):

这样可以很好地工作,并自动将新地址插入地址表。 但是,如果我想删除地址:

//// Previously loaded customer with attached address
cli.Address = null;
//// Save repository, commit transaction  
这样,NHibernate就不会从Addresses表中删除该行,而是更新该行,将其所有字段设置为null(Id除外)


我的映射出了什么问题?

根据您的映射,NHibernate可以正确执行。join子句用于将单个对象分布在多个表上的情况。通常,对象的每个表中始终有一行

另一方面,组件映射是当您需要细粒度对象模型,但将数据存储在与所属类相同的表中时。如果属性为null,NHibernate只能将组件使用的所有列设置为null。组件列是联接表中唯一的非键列这一事实与此无关

也许您正在寻找一对一的映射?

这里正是这种情况,我的对象客户端分布在多个表中。无论如何,谢谢你的回答;但我发现问题出在我为了让它更清晰而在映射中保留的细节上。事实证明,我所有的表都有一些审计列,它们总是有一个值,这就是为什么NHibernate不删除该行的原因。
Address dir = new Address();
dir.Street = "Foo";
dir.Number = 27;
//// Previously loaded customer
cli.Address = dir;
//// Save repository, commit transaction
//// Previously loaded customer with attached address
cli.Address = null;
//// Save repository, commit transaction