У меня есть две сущности: Shelf
и Product
:
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()
должен спасти все , а не только сам объект без их отношений.