我有一个包含两个Child类列表的Parent类
public class Parent
{
...
public virtual ICollection<Foo> Foo{ get; set; }
public virtual ICollection<Bae> Bar{ get; set; }
}
public class Foo
{
...
public virtual Parent Parent{ get; set; }
}
public class Bar
{
...
public virtual Parent Parent{ get; set; }
}
映射是
public ParentMap()
{
...
HasMany(m => m.Foo).AsSet().Cascade.All();
HasMany(m => m.Bar).AsSet().Cascade.All();
}
public FooMap()
{
...
References(m => m.Parent);
}
public BarMap()
{
...
References(m => m.Parent);
}
每当我保存父对象时,我都会
INSERT Parent ...
INSERT Foo with Parent_id set to NULL
INSERT Bar with Parent_id set to NULL
UPDATE Foo set Parent_id to Parent id
UPDATE Bar set Parent_id to Parent id
分开是否可以将关系设置为Inverse
以避免额外更新?
答案 0 :(得分:9)
如果您有双向联想,应将HasMany方面设置为反向,这是最常用的方法。
另一种可能性是将父引用设置为Not.Insert().Not.Update()
,然后对于插入/更新将完全忽略父属性。
如果您不需要从子级到父级的引用,只需将其从类和映射中删除,这样您就只有该集合。
对于第二种和第三种方式,您可以在HasMany上另外设置Not.KeyNullable()
,这可以确保NHibernate插入已设置父ID的新行,并避免使用额外的更新语句(此功能需要NHibernate 3.2。 0)。
答案 1 :(得分:1)
AFAIK,不是。 通过设置inverse属性,可以指定关联的所有者。
为什么指定反向属性是个问题?