0

NHibernate で次のことを達成する方法がたくさんあることは知っています。他のシナリオには興味がありません。私が疑問に思っているのは、多対 1 の関係と 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 は、FirstName および/または LastName に値を与え、その名または姓を持つ Customers を含む 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 に含めることができます。コレクションでも同じことができますか?

4

1 に答える 1

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ですが、変更できます。

于 2009-10-07T05:21:01.613 に答える