当前位置:  开发笔记 > 编程语言 > 正文

NHibernate中的反向属性

如何解决《NHibernate中的反向属性》经验,为你挑选了2个好方法。

我如何使用反向属性?如果我没有弄错,对于一对多关系,inverse属性必须设置为true.对于多对多关系,其中一个实体类逆属性必须设置为true,另一个设置为false.

任何人都可以对此有所了解吗?



1> Frederik Ghe..:

inverse属性不能设置为true ...

您可以使用inverse属性指定关联的"所有者".(关联只能有一个所有者,因此必须将一端设置为反向,另一端必须设置为"非反向").(主:inverse=false;非所有者:inverse=true)

在一对多关联中,如果您不将集合标记为反向结束,那么NHibernate将执行额外的更新.实际上,在这种情况下,NHibernate将首先插入集合中包含的实体,如果需要,插入拥有集合的实体,然后更新"集合实体",以便设置外键和关联是.(请注意,这也意味着数据库中的外键应该可以为空).

当您将集合结束标记为"反向"时,NHibernate将首先保留"拥有"该集合的实体,并在之后保留集合中的实体,从而避免使用额外的UPDATE语句.

因此,在双向关联中,您总是有一个反向结束.


在我看来,这是非常糟糕的术语.为什么不标记所有权而不是"反向"?!
这解释了一切只是为了添加所有者是一个在表中有外键的人
http://tadtech.blogspot.com/2007/02/hibernate-when-is-inversetrue-and-when.html

2> Emad Alashi..:

除了上面的答案,根据我的理解,您需要手动将外键值保留在集合中,即如果您不想要额外的更新语句:

Parent par = Session.Get(8);

Child ch = new Child();
ch.Name = "Emad";

//set the parent foreign key manually
ch.MyParent = par;

par.MyChildren.Add(ch);
Session.Save(par);

有关inverse属性的进一步说明,请查看以下帖子:

http://www.emadashi.com/index.php/2008/08/nhibernate-inverse-attribute/

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有