2009-10-07 48 views
0

我知道在NHibernate中有很多方法來實現以下 - 我對其他場景不感興趣。我想知道的是,如果可以使用NHibernate中的多對一關係和示例查詢自動生成子查詢。NHibernate的 - 通過示例查詢 - 子查詢

我的設置如下:

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將給予名字和/或姓氏的值並返回包含具有該名字和/或姓氏的客戶的IList。

我想什麼做的是增加訂單,導致像下面這樣的查詢CustomerOrders列表:Order類的

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和訂單號碼的屬性(的利益簡潔,我沒有包括這個類)。有誰知道這是否可能?如果我需要澄清我的問題,請讓我知道。基本上我能夠填充原始值並將它們包含在QBE中。我可以對收藏做同樣的事嗎?

回答

0

我不知道我的理解....

當你這樣做:

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,但你可以改變。