我有两个实体,一个Shelf
和Product
:为什么Session.Flush()需要保持关系?
public class Shelf
{
public virtual IList<Product> Products { get; set; }
public Shelf()
{
Products = new List<Product>();
}
}
public class Product
{
public virtual string Name { get; set; }
}
基本上说,一个Shelf
可以包含很多Products
,并且Product
可以在很多Shelves
放。因此,Shelf
和Product
之间存在单向多对多关系。当我运行下面的代码:
var shelf = new Shelf();
var product = new Product { Name = "Peas" };
shelf.Products.Add(product);
using (var session = SessionFactory.OpenSession())
{
session.Save(shelf);
}
的NHibernate将保存Product
和Shelf
,但它不会救他们之间的关系,因此,如果您检索Shelf
,它将包含零Products
。
但是,如果我添加一个session.Flush()
调用,它将正确保存关系,以便检索Shelf
将返回一个Product
。
本博客文章的详细信息我的问题:
http://www.neeraj.name/2005/07/02/hibernate-session-close-does-not-call-session-flush.html
不过,我想知道为什么我需要这个session.Flush()
通话。看起来与直觉相反,保存Shelf
以正确的级联行为将保存Product
,但除非我刷新会话,否则无法建立两者之间的关系。在我看来,Save()
调用应该节省所有内容,而不仅仅是实体本身没有他们的关系。
感谢迭戈,这完美地回答了我的问题! – 2010-09-15 19:16:27