我如何使用反向属性?如果我没有弄错,对于一对多关系,inverse属性必须设置为true.对于多对多关系,其中一个实体类逆属性必须设置为true,另一个设置为false.
任何人都可以对此有所了解吗?
inverse属性不能设置为true ...
您可以使用inverse属性指定关联的"所有者".(关联只能有一个所有者,因此必须将一端设置为反向,另一端必须设置为"非反向").(主:inverse=false
;非所有者:inverse=true
)
在一对多关联中,如果您不将集合标记为反向结束,那么NHibernate将执行额外的更新.实际上,在这种情况下,NHibernate将首先插入集合中包含的实体,如果需要,插入拥有集合的实体,然后更新"集合实体",以便设置外键和关联是.(请注意,这也意味着数据库中的外键应该可以为空).
当您将集合结束标记为"反向"时,NHibernate将首先保留"拥有"该集合的实体,并在之后保留集合中的实体,从而避免使用额外的UPDATE语句.
因此,在双向关联中,您总是有一个反向结束.
除了上面的答案,根据我的理解,您需要手动将外键值保留在集合中,即如果您不想要额外的更新语句:
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/