2009-10-07 4 views
0

NHibernate에서 다음을 달성하는 방법이 많이 있다는 것을 알고 있습니다. 다른 시나리오에는 관심이 없습니다. 내가 궁금하네요 자동으로 하위 쿼리를 NHibernate 예제로 다 대일 관계 및 쿼리를 사용하여 생성 할 수 있습니다.NHibernate - 예제 쿼리 - 하위 쿼리

<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을 제공 및/또는 값을 성 것 :

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

내 매핑은 다음과 같은 : 다음과 같이

내 설정이다 첫 번째 및/또는 성이있는 고객이 포함 된 IList를 반환합니다. 의 이익 (주문 클래스의하는 위의 예제 ORDERNAME에서

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' 

과 OrderNumber를 등록 : 내가하고 싶은 무엇

는 다음과 같은 쿼리의 결과로 CustomerOrders 목록에 명령을 추가입니다 간결 나는이 종류를 포함하지 않았다). 이것이 가능한지 아는 사람 있습니까? 제 질문을 명확히해야하는지 알려주세요. 기본적으로 원시 값을 채우고 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입니다하지만 당신은 변경할 수 있습니다.