하나 개 NHibernate에 쿼리이 아닌 직접 관련 테이블에 대한 작업.내가 NHibernate에 새로운 오전과 내가 무엇을 해달라고 부탁하는 것은 의미가 확실하지 않다
public IEnumerable<Order> GetByQueue(OrderStatus orderStatus, Queue queue)
{
var criteria = NHibernateSession.CreateCriteria(typeof (TaskDevice), "TaskDevice");
//Pull up all Tasks where a Task's TaskDevice's SourceSiteID or DestinationSiteID are represented in a Queue's QueueLocations.
foreach(QueueLocation queueLocation in queue.QueueLocations)
{
criteria.Add(
Expression.Disjunction()
.Add(Restrictions.Eq("OriginalLocationID", queueLocation.ComponentID))
.Add(Restrictions.Eq("LocationID", queueLocation.ComponentID))
);
}
//Get a hold on all the Tasks returned from TaskDevices.
List<Task> tasks = criteria.List<TaskDevice>().Select(taskDevice => taskDevice.Task).ToList();
//Return all Orders of the given Tasks whose OrderStatus matched the provided orderStatus.
return tasks.Where(task => task.Order.OrderStatus == orderStatus).Select(task => task.Order);
}
이 코드는 현재 큐 개체에 따라 달라집니다
는 내가 현재 가지고 몇 가지 코드를 다시 작성하려합니다. 이 코드를 변경하여 Queue 객체 대신 queueID가 제공되도록하고 싶습니다. QueueLocation 테이블에는 해당 열 중 하나에 대한 'QueueID'가 들어 있습니다.즉, 데이터베이스의 QueueLocation에있는 다른 테이블과 상호 작용해야하며 제공된 QueueID와 일치하는 QueueID를 가진 QueueLocation을로드 한 다음 Queue 개체를 반복하지 않고 제한 사항을 추가 할 수 있습니다.
작업 대기열을 알고하지 않고 큐는 작업을 알고하지 않습니다. 그것들은 Queue가 Task의 OriginalLocationID 나 LocationID와 ComponentID가 일치하는 QueueLocation을 포함 할 수 있다는 사실에 의해 관련됩니다.
나는 내 최초 기준 선언을 변경하는 경우 : NHibernate에이 TaskDevice에 속성 QueueLocation을 찾을 수
var criteria = NHibernateSession
.CreateCriteria(typeof (TaskDevice), "TaskDevice")
.CreateCriteria("QueueLocation", "QueueLocation");
다음 예외가 생성됩니다 표시. 이것은 유효한 예외입니다. TaskDevice는 QueueLocation을 알지 못합니다.
나는 하나 개의 쿼리에 완전히 자 NHibernate를 통해 내 제한을 필터링 할 수 NHibernate에는 사용하여 두 개의 비 관련 테이블을로드하는 방법을 궁금해하고있다. 이것이 가능한가?