public void Avoiding_Select_N_Plus_One_Issue() { using (IUnitOfWork unitOfWork = new UnitOfWork()) { for (int i = 0; i < 10; i++) { var customer = new CustomerWithOneToMany { Name = string.Format("Customer: {0}", i) }; unitOfWork.Session.Save(customer); var order = new OrderWithManyToOne { Name = "Order" }; customer.AddOrder(order); } unitOfWork.Commit(); } using (IUnitOfWork unitOfWork = new UnitOfWork()) { // HQL (Hibernate Query Language) var customers = unitOfWork.Session.CreateQuery("from CustomerWithOneToMany customer left join fetch customer.Orders") .List <CustomerWithOneToMany>(); // Criteria Api unitOfWork.Session.Evict(customers); customers = unitOfWork.Session.CreateCriteria <CustomerWithOneToMany>() .SetFetchMode("Orders", FetchMode.Eager) .List <CustomerWithOneToMany>(); // QueryOver unitOfWork.Session.Evict(customers); customers = unitOfWork.Session.QueryOver <CustomerWithOneToMany>() .Fetch(x => x.Orders).Eager .List(); // Linq unitOfWork.Session.Evict(customers); customers = unitOfWork.Session.Query <CustomerWithOneToMany>() .Fetch(x => x.Orders) .ToList(); foreach (var customer in customers) { foreach (var order in customer.Orders) { var name = order.Name; } } } Assert.Equal(20, _sessionFactory.Statistics.EntityInsertCount); }
public void Avoiding_Select_N_Plus_One_Issue() { using (IUnitOfWork unitOfWork = new UnitOfWork()) { for (int i = 0; i < 10; i++) { var customer = new CustomerWithOneToMany { Name = string.Format("Customer: {0}", i) }; unitOfWork.Session.Save(customer); var order = new OrderWithManyToOne { Name = "Order" }; customer.AddOrder(order); } unitOfWork.Commit(); } using (IUnitOfWork unitOfWork = new UnitOfWork()) { // HQL (Hibernate Query Language) var customers = unitOfWork.Session.CreateQuery("from CustomerWithOneToMany customer left join fetch customer.Orders") .List<CustomerWithOneToMany>(); // Criteria Api unitOfWork.Session.Evict(customers); customers = unitOfWork.Session.CreateCriteria<CustomerWithOneToMany>() .SetFetchMode("Orders", FetchMode.Eager) .List<CustomerWithOneToMany>(); // QueryOver unitOfWork.Session.Evict(customers); customers = unitOfWork.Session.QueryOver<CustomerWithOneToMany>() .Fetch(x => x.Orders).Eager .List(); // Linq unitOfWork.Session.Evict(customers); customers = unitOfWork.Session.Query<CustomerWithOneToMany>() .Fetch(x => x.Orders) .ToList(); foreach (var customer in customers) { foreach (var order in customer.Orders) { var name = order.Name; } } } Assert.Equal(20, _sessionFactory.Statistics.EntityInsertCount); }
public void Common_Select_N_Plus_One_Issue() { using (IUnitOfWork unitOfWork = new UnitOfWork()) { for (int i = 0; i < 10; i++) { var customer = new CustomerWithOneToMany { Name = string.Format("Customer: {0}", i) }; unitOfWork.Session.Save(customer); var order = new OrderWithManyToOne { Name = "Order" }; customer.AddOrder(order); } unitOfWork.Commit(); } using (IUnitOfWork unitOfWork = new UnitOfWork()) { var customers = unitOfWork.Session.QueryOver <CustomerWithOneToMany>().List(); foreach (var customer in customers) { foreach (var order in customer.Orders) { var name = order.Name; } } unitOfWork.Commit(); } Assert.Equal(20, _sessionFactory.Statistics.EntityInsertCount); }
public void Can_Customer_Add_Orders_In_A_One_To_Many_bidirectional_Association() { // Forgetting to set the inverse true on CustomerWithOneToMany will cause unneccessary update statements using (IUnitOfWork unitOfWork = new UnitOfWork()) { var customer = new CustomerWithOneToMany { Name = "Customer" }; unitOfWork.Session.Save(customer); for (int i = 0; i < 10; i++) { var order = new OrderWithManyToOne { Name = string.Format("Order: {0}", i) }; customer.AddOrder(order); } unitOfWork.Commit(); } Assert.Equal(11, _sessionFactory.Statistics.EntityInsertCount); }
public void Common_Select_N_Plus_One_Issue() { using (IUnitOfWork unitOfWork = new UnitOfWork()) { for (int i = 0; i < 10; i++) { var customer = new CustomerWithOneToMany { Name = string.Format("Customer: {0}", i) }; unitOfWork.Session.Save(customer); var order = new OrderWithManyToOne { Name = "Order" }; customer.AddOrder(order); } unitOfWork.Commit(); } using (IUnitOfWork unitOfWork = new UnitOfWork()) { var customers = unitOfWork.Session.QueryOver<CustomerWithOneToMany>().List(); foreach (var customer in customers) { foreach (var order in customer.Orders) { var name = order.Name; } } unitOfWork.Commit(); } Assert.Equal(20, _sessionFactory.Statistics.EntityInsertCount); }