2009-10-07 9 views
0

Je sais qu'il y a BEAUCOUP de façons d'obtenir ce qui suit dans NHibernate - je ne suis pas intéressé par d'autres scénarios. Ce que je me demande, c'est s'il est possible de générer automatiquement une sous-requête en utilisant une relation many-to-one et une requête par exemple dans NHibernate.NHibernate - Requête par exemple - Sous-requête

Ma configuration est la suivante:

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;} 
} 

Mon mapping ressemble à quelque chose comme ce qui suit:

<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> 

Un simple QBE donnerait FirstName et/ou LASTNAME une valeur et renvoyez un client IList contenant ce prénom et/ou ce nom de famille.

Ce que je voudrais faire est d'ajouter des commandes à la liste CustomerOrders résultant dans une requête comme les suivants:

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' 

Dans l'exemple ci-dessus OrderName et orderNumber sont propriétés de la classe ordre (dans l'intérêt de brièveté je n'ai pas inclus cette classe). Est-ce que quelqu'un sait si c'est possible? S'il vous plaît laissez-moi savoir si je dois clarifier ma question. Essentiellement, je suis capable de peupler les valeurs primitives et de les inclure dans le QBE. Puis-je faire de même avec les collections?

Répondre

0

Je ne suis pas sûr que je comprends ....

Lorsque vous faites ceci:

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(); 
} 

Ici, ce n'est pas API QBE mais les critères, mais vous pouvez changer.

Questions connexes