public void QuerySubclassAttribute() { using (ISession s = OpenSession()) using (ITransaction t = s.BeginTransaction()) { Person p = new Person(); p.Name = "Emmanuel"; p.Sex = 'M'; s.Persist(p); Employee q = new Employee(); q.Name = "Steve"; q.Sex = 'M'; q.Title = "Mr"; q.Salary = 1000m; s.Persist(q); IList result = s.CreateQuery("from Person p where p.salary > 100").List(); Assert.AreEqual(1, result.Count); Assert.AreSame(q, result[0]); result = s.CreateQuery("from Person p where p.salary > 100 or p.name like 'E%'").List(); Assert.AreEqual(2, result.Count); if (!TestDialect.HasBrokenDecimalType) { result = s.CreateCriteria(typeof (Person)).Add(Property.ForName("salary").Gt(100m)).List(); Assert.AreEqual(1, result.Count); Assert.AreSame(q, result[0]); } result = s.CreateQuery("select p.salary from Person p where p.salary > 100").List(); Assert.AreEqual(1, result.Count); Assert.AreEqual(1000m, (decimal)result[0]); s.Delete(p); s.Delete(q); t.Commit(); s.Close(); } }
public void UnionSubclass() { using (ISession s = OpenSession()) using (ITransaction t = s.BeginTransaction()) { Employee mark = new Employee(); mark.Name = "Mark"; mark.Title = "internal sales"; mark.Sex = 'M'; mark.Address.address = "buckhead"; mark.Address.zip = "30305"; mark.Address.country = "USA"; Customer joe = new Customer(); joe.Name = "Joe"; joe.Address.address = "San Francisco"; joe.Address.zip = "XXXXX"; joe.Address.country = "USA"; joe.Comments = "Very demanding"; joe.Sex = 'M'; joe.Salesperson = mark; Person yomomma = new Person(); yomomma.Name = "mum"; yomomma.Sex = 'F'; s.Save(yomomma); s.Save(mark); s.Save(joe); // TODO NH : This line is present in H3.2.5 test; ReadCommitted ? //Assert.AreEqual(0, s.CreateQuery("from System.Object").List().Count); Assert.AreEqual(3, s.CreateQuery("from Person").List().Count); Assert.AreEqual(1, s.CreateQuery("from Person p where p.class = Customer").List().Count); Assert.AreEqual(1, s.CreateQuery("from Person p where p.class = Person").List().Count); s.Clear(); IList<Customer> customers = s.CreateQuery("from Customer c left join fetch c.salesperson").List<Customer>(); foreach (Customer c in customers) { Assert.IsTrue(NHibernateUtil.IsInitialized(c.Salesperson)); Assert.AreEqual("Mark", c.Salesperson.Name); } Assert.AreEqual(1, customers.Count); s.Clear(); customers = s.CreateQuery("from Customer").List<Customer>(); foreach (Customer c in customers) { Assert.IsFalse(NHibernateUtil.IsInitialized(c.Salesperson)); Assert.AreEqual("Mark", c.Salesperson.Name); } Assert.AreEqual(1, customers.Count); s.Clear(); mark = s.Get<Employee>(mark.Id); joe = s.Get<Customer>(joe.Id); mark.Address.zip = "30306"; Assert.AreEqual(1, s.CreateQuery("from Person p where p.address.zip = '30306'").List().Count); s.Delete(mark); s.Delete(joe); s.Delete(yomomma); Assert.AreEqual(0, s.CreateQuery("from Person").List().Count); t.Commit(); s.Close(); } }