Да кажем, че има таблици с категории и продукти. И продуктът има присвоен идентификатор и референтна категория:
public class Product
{
public virtual int ProductId { get; set; }
public virtual Category Category { get; set; }
public virtual String Name { get; set; }
public Product() {}
public Product(int productId, string name, Category category) { ... }
}
При вмъкване на три продукта по този начин:
var session = sessionFactory.OpenSession();
Product product = new Product(1, "New Product", session.Load<Category>(1));
session.Save(product);
session.Flush();
product = new Product(2, "New Product 2", session.Load<Category>(2));
session.Save(product);
session.Flush();
product = new Product(3, "New Product 3", session.Load<Category>(3));
session.Save(product);
session.Flush();
Той ще генерира само три вмъквания (няма да извлича категории).
Но когато правите същия набор от действия без промиване след всяко вмъкване, тогава ще извлече прокси асоциации:
var session = sessionFactory.OpenSession();
Product product = new Product(1, "New Product", session.Load<Category>(1));
session.Save(product);
product = new Product(2, "New Product 2", session.Load<Category>(2));
session.Save(product);
product = new Product(3, "New Product 3", session.Load<Category>(3));
session.Save(product);
session.Flush();
Генерираният SQL е следният:
Това е много опростен пример, всъщност трябва да вмъкна около 1000 обекта и бих искал да използвам групиране, без да извличам всички свързани обекти.
АКТУАЛИЗАЦИЯ: пълен пример може да бъде изтеглен тук< /силен>