BreakingChangeswithNHibernate4Upgrade我可以在NHibernate4.0中看到新的和修复的东西我想知道是否有人遇到从NHibernate3升级到4的hbm映射问题?我担心现在更强调流畅的绘图。我可以测试更明显的重大变化,但想知道是否有人在生产中遇到过一开始可能不那么明显的细微问题。它看起来像是一次重大升级,你可能会回去。仅供参考,我发现了一个新错误。我们使用MappingByCode,我们曾经有一个具有多个Bag映射的实体,其Fetch类型设置为JoinwithNHibernatev3.3.x。这在版本4.0.x中不再被允许。我们收到一条错误消息,无法同时获取多个包。这对于幕后必要的内容是有意义的,但从技术上讲应该被视为一个重大变化。NHibernate不足以告诉我们哪个映射导致了问题。我们遇到了一个相当大的QueryOver-Cannotsimultaneousfetchmultiplebags,使用Nhibernate4和FluentNhibernate映射。解决方案是在我们的FluentMaps上使用AsSet()(根据我们的支持字段),最终解决了问题。正如评论中所要求的,这里有一个异常前后映射的小例子:这是我们类的一个非常简化的表示,导致Cannotsimultaneousfetchmultiplebags。抽象实体类属于S#Arplite架构。在更改之前,它看起来像这样publicclassOrderHeader:Entity{publicvirtualIListItems{get;放;}}publicclassOrderItem:Entity{publicvirtualdecimalPrice{get;设置;}公共虚拟字符串ItemNumber{get;放;}publicvirtualOrderHeaderHeader{get;设置;}}公共类OrderHeaderMap:ClassMap{Id(e=>e.Id).GeneratedBy.Native();HasMany(e=>e.OrderItems).Inverse();}publicclassOrderItemMap:ClassMap{Id(e=>e.Id).GeneratedBy.Native();引用(e=>e.Header).Not.Nullable();如您所见,OrderHeader具有IList项。将其更改为publicclassOrderHeader:Entity{publicvirtualISetItems{get;放;}//ISethere}publicclassOrderItem:Entity{publicvirtualdecimalPrice{get;设置;}公共虚拟字符串ItemNumber{get;放;}publicvirtualOrderHeaderHeader{get;设置;}}公共类OrderHeaderMap:ClassMap{Id(e=>e.Id).GeneratedBy.Native();HasMany(e=>e.OrderItems).Inverse();}publicclassOrderItemMap:ClassMap{Id(e=>e.Id).GeneratedBy.Native();引用(e=>e.Header).Not.Nullable().AsSet();//ExplicitAsSet}因此,地图上的ISet和AnexplicitAsSet()使问题消失了。这个代码片段非常简单,我们有多个实体和HasMany()QueryOver中的IList——当所有实体都更新到ISet时,它工作正常。我不会太担心hbm本身。FluentNHibernate通过映射层“编译”为XML。NHibernate自己的代码映射也使用与hbm文件相同的代码段。无论如何,映射代码没有太大变化。其他部分更有可能出现任何倒退。以上是C#学习教程:随着NHibernate4的升级,改动的内容全部销毁。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处:
