我有兩個實體,一個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