示例#1
0
		public virtual Order GenerateNewOrder(decimal total)
		{
			Order order = new Order(this);
			order.OrderDate = DateTime.Today;
			order.Total=total;

			return order;
		}
		public void NonLazyFetch()
		{
			ISession s = OpenSession();
			ITransaction t = s.BeginTransaction();
			Product p = new Product();
			p.ProductId = "A123";
			p.Description = "nipple ring";
			p.Price = 1.0m;
			p.NumberAvailable = 1004;
			s.Persist(p);

			Product p2 = new Product();
			p2.ProductId = "X525";
			p2.Description = "nose stud";
			p2.Price = 3.0m;
			p2.NumberAvailable = 105;
			s.Persist(p2);

			Customer c = new Customer();
			c.Address = "St Kilda Rd, MEL, 3000";
			c.Name = "Virginia";
			c.CustomerId = "C111";
			s.Persist(c);

			Order o = new Order(c);
			o.OrderDate = DateTime.Today;
			LineItem li = new LineItem(o, p);
			li.Quantity = 2;

			t.Commit();
			s.Close();

			s = OpenSession();
			t = s.BeginTransaction();
			o = s.Get<Order>(new Order.ID("C111", 0));
			Assert.AreEqual(2m, o.Total);
			t.Commit();
			s.Close();

			s = OpenSession();
			t = s.BeginTransaction();
			o = (Order) s.CreateQuery("from Order o left join fetch o.LineItems li left join fetch li.Product p").UniqueResult();
			Assert.IsTrue(NHibernateUtil.IsInitialized(o.LineItems));
			li = (LineItem) o.LineItems[0];
			Assert.IsTrue(NHibernateUtil.IsInitialized(li));
			Assert.IsTrue(NHibernateUtil.IsInitialized(li.Product));
			t.Commit();
			s.Close();

			s = OpenSession();
			t = s.BeginTransaction();
			o = (Order) s.CreateQuery("from Order o").UniqueResult();
			Assert.IsTrue(NHibernateUtil.IsInitialized(o.LineItems));
			li = (LineItem) o.LineItems[0];
			Assert.IsTrue(NHibernateUtil.IsInitialized(li));
			Assert.IsFalse(NHibernateUtil.IsInitialized(li.Product));
			t.Commit();
			s.Close();

			s = OpenSession();
			t = s.BeginTransaction();
			s.Delete("from LineItem");
			s.Delete("from Order");
			s.Delete("from Customer");
			s.Delete("from Product");
			t.Commit();
			s.Close();
		}
		public void CompositeIds()
		{
			ISession s;
			ITransaction t;
			Product p2;
			using (s = OpenSession())
			{
				t = s.BeginTransaction();

				Product p = new Product();
				p.ProductId = "A123";
				p.Description = "nipple ring";
				p.Price = 1.0m;
				p.NumberAvailable = 1004;
				s.Persist(p);

				p2 = new Product();
				p2.ProductId = "X525";
				p2.Description = "nose stud";
				p2.Price = 3.0m;
				p2.NumberAvailable = 105;
				s.Persist(p2);

				Customer c = new Customer();
				c.Address = "St Kilda Rd, MEL, 3000";
				c.Name = "Virginia";
				c.CustomerId = "C111";
				s.Persist(c);

				Order o = new Order(c);
				o.OrderDate = DateTime.Today;
				LineItem li = new LineItem(o, p);
				li.Quantity = 2;

				t.Commit();
			}

			using (s = OpenSession())
			{
				t = s.BeginTransaction();
				Order o = s.Get<Order>(new Order.ID("C111", 0));
				Assert.That(o.Total == 2m);
				t.Commit();
			}

			using(s = OpenSession())
			{
				t = s.BeginTransaction();
				s.CreateQuery(
					"from Customer c left join fetch c.Orders o left join fetch o.LineItems li left join fetch li.Product p").List();
				t.Commit();
			}

			using(s = OpenSession())
			{
				t = s.BeginTransaction();
				s.CreateQuery("from Order o left join fetch o.LineItems li left join fetch li.Product p").List();
				t.Commit();
			}

			using(s = OpenSession())
			{
				t = s.BeginTransaction();
				IEnumerable iter = s.CreateQuery("select o.id, li.id from Order o join o.LineItems li").List();
				foreach (object[] stuff in iter)
				{
					Assert.AreEqual(2, stuff.Length);
				}
				iter = s.CreateQuery("from Order o join o.LineItems li").Enumerable();
				foreach (object[] stuff in iter)
				{
					Assert.AreEqual(2, stuff.Length);
				}
				t.Commit();
			}

			using(s = OpenSession())
			{
				t = s.BeginTransaction();
				Customer c = s.Get<Customer>("C111");
				Order o2 = new Order(c);
				o2.OrderDate = DateTime.Today;
				s.Flush();
				LineItem li2 = new LineItem(o2, p2);
				li2.Quantity = 5;
				IList bigOrders = s.CreateQuery("from Order o where o.Total>10.0").List();
				Assert.AreEqual(1, bigOrders.Count);
				t.Commit();
			}

			
			using (s = OpenSession())
			{
				t = s.BeginTransaction();
				s.Delete("from LineItem");
				s.Delete("from Order");
				s.Delete("from Customer");
				s.Delete("from Product");
				t.Commit();
			}
		}
		public void MultipleCollectionFetch()
		{
			ISession s = OpenSession();
			ITransaction t = s.BeginTransaction();
			Product p = new Product();
			p.ProductId = "A123";
			p.Description = "nipple ring";
			p.Price = 1.0m;
			p.NumberAvailable = 1004;
			s.Persist(p);

			Product p2 = new Product();
			p2.ProductId = "X525";
			p2.Description = "nose stud";
			p2.Price = 3.0m;
			p2.NumberAvailable = 105;
			s.Persist(p2);

			Customer c = new Customer();
			c.Address = "St Kilda Rd, MEL, 3000";
			c.Name = "Virginia";
			c.CustomerId = "C111";
			s.Persist(c);

			Order o = new Order(c);
			o.OrderDate = DateTime.Today;
			LineItem li = new LineItem(o, p);
			li.Quantity = 2;
			LineItem li2 = new LineItem(o, p2);
			li2.Quantity = 3;

			Order o2 = new Order(c);
			o2.OrderDate = DateTime.Today;
			LineItem li3 = new LineItem(o2, p);
			li3.Quantity = 1;
			LineItem li4 = new LineItem(o2, p2);
			li4.Quantity = 1;

			t.Commit();
			s.Close();

			s = OpenSession();
			t = s.BeginTransaction();
			c =
				(Customer)
				s.CreateQuery(
					"from Customer c left join fetch c.Orders o left join fetch o.LineItems li left join fetch li.Product p").
					UniqueResult();
			Assert.IsTrue(NHibernateUtil.IsInitialized(c.Orders));
			Assert.AreEqual(2, c.Orders.Count);
			Assert.IsTrue(NHibernateUtil.IsInitialized(((Order) c.Orders[0]).LineItems));
			Assert.IsTrue(NHibernateUtil.IsInitialized(((Order) c.Orders[1]).LineItems));
			Assert.AreEqual(((Order) c.Orders[0]).LineItems.Count, 2);
			Assert.AreEqual(((Order) c.Orders[1]).LineItems.Count, 2);
			t.Commit();
			s.Close();

			s = OpenSession();
			t = s.BeginTransaction();
			s.Delete("from LineItem");
			s.Delete("from Order");
			s.Delete("from Customer");
			s.Delete("from Product");
			t.Commit();
			s.Close();
		}