我正在将现有的*.hbm.xml文件更新到fluent ClassMaps中,并且偶然发现我们的映射文件中有一个错误,我不知道正确映射它的默认行为。
映射文件具有:
<one-to-one name="LineItemAssembly"
class="LineItemAssembly"
cascade="all-delete-orphan" />在使用Fluent时,我希望它映射到:
HasOne<LineItemAssembly>(x => x.LineItemAssembly)
.Cascade.AllDeleteOrphan();但是,AllDeleteOrphan()不是级联的一个选项(正确地说是这样)。我理解这是因为它不是一个选项,而是因为它是映射文件中的一个错误。什么是使用Fluent的等效映射,以便我的fluent映射具有与.hbm.xml文件完全相同的功能?我认为将Cascade排除在流畅映射之外将是默认行为,但我就是不确定。
发布于 2012-12-14 04:06:05
最后,我只需要找出哪里出了问题并修复它,而不考虑默认的流畅行为。在http://brunoreis.com/tech/fluent-nhibernate-hasone-how-implement-one-to-one-relationship/的帮助下,我能够解决这个问题。
我需要添加.Cascade.All()。然而,我真正需要的是在LineItemAssembly类的映射中脱离HasOne关系的.ForeignKey()。
发布于 2017-05-17 21:37:17
现在在NHibernate 4.1中支持这一点--一对一关系级联"all-delete-orphan“现在被正确支持(问题NH-1262已在4.1中得到修复)。我对此进行了测试,可以确认它是否正常工作--一旦您将子项的一对一属性设置为null,它就会对子项发出sql delete命令。
不幸的是,fluent nhibernate不支持它,因为它上一次更新是在2015年。但是,你可以自己从源代码(https://github.com/jagregory/fluent-nhibernate,How to build Fluent NHibernate?;我在这方面有点困难-你需要安装ruby,rubygem,运行InstallGems.bat,手动运行"bundle install“(由于某种原因没有为我执行),并使用"rake”命令构建解决方案)来构建流畅的nhibernate。

可从here下载支持HasOne AllDeleteOrphan的定制构建(由我)的FluentNHibernate.dll版本2.0.3.1
发布于 2012-12-14 02:16:10
您不能在1:1关系中有一个孤立项,根据定义,两个记录都必须存在。删除总是以1:1的方式级联,我不知道为什么XML映射允许这样做。
https://stackoverflow.com/questions/13864384
复制相似问题