代码之家  ›  专栏  ›  技术社区  ›  Jason Irwin

NHibernate-按示例查询-子查询

  •  0
  • Jason Irwin  · 技术社区  · 15 年前

    我的设置如下:

    public class Customer
    {
        public virtual int ID { get; set; }
        public virtual string Firstname { get; set; }
        public virtual string Lastname { get; set; }
        public virtual IList<Orders> CustomerOrders { get; set;}
    }
    

    我的映射如下所示:

    <property name="FirstName" type="string" length="200" not-null="true"/>
    <property name="Lastname " type="string" length="20" not-null="true"/>
    
    
    <bag name="CustomerOrders" cascade="save-update" inverse="true">
      <key column="CustomerID" on-delete="cascade" />
      <one-to-many class="myassembly.CustomerOrders, myassembly" />
    </bag>
    

    一个简单的QBE将给first name和/或LastName一个值,并返回一个包含具有该first和/或LastName的客户的IList。

    我要做的是将订单添加到CustomerOrders列表,从而生成如下查询:

    select * from CustomerOrders c where FirstName = 'myfirstname' and LastName = 'mylastName' inner join Orders o on c.CustomerID = o.OrderID
    where o.OrderName = 'myorderName' and o.OrderNumber = 'myordernumber' 
    

    在上面的示例中,OrderName和OrderNumber是Order类的属性(为了简洁起见,我没有包括这个类)。有人知道这是否可能吗?如果我需要澄清我的问题,请告诉我。基本上我能够填充基本值并将它们包含在QBE中。我可以对收藏做同样的事吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   TheBoubou codingbadger    15 年前

    我不太明白。。。。

    using (ITransaction tx = session.BeginTransaction())
    {
         IList<Customer> customers =  
                     session.CreateCriteria(typeof(Customer))
                    .Add(Expression.Eq("FirstName", "MyFirstName"))
                    .Add(Expression.Eq("LastName", "MyLastName"))
                    .List<Customer>();
    
         customers[0].CustomerOrders.Add(new Orders());
    
         tx.Commit();
    }
    

    这里不是QBE而是标准API,但是您可以更改。