public override void SetUp()
        {
            base.SetUp();

            _registrationAgentMock = MockRepository.GenerateStrictMock <IFetchedRelationDataRegistrationAgent>();
            _fetchResultLoaderMock = MockRepository.GenerateStrictMock <IFetchEnabledObjectLoader>();

            _eagerFetcher = new EagerFetcher(_registrationAgentMock);

            _fetchQueryStub1 = MockRepository.GenerateStub <IQuery> ();
            _fetchQueryStub2 = MockRepository.GenerateStub <IQuery> ();

            _orderTicketEndPointDefinition      = GetEndPointDefinition(typeof(Order), "OrderTicket");
            _customerEndPointDefinition         = GetEndPointDefinition(typeof(Order), "Customer");
            _industrialSectorEndPointDefinition = GetEndPointDefinition(typeof(Company), "IndustrialSector");

            _originatingOrder1 = DomainObjectMother.CreateFakeObject <Order>();
            _originatingOrder2 = DomainObjectMother.CreateFakeObject <Order>();

            _originatingOrderData1 = LoadedObjectDataObjectMother.CreateLoadedObjectDataStub(_originatingOrder1);
            _originatingOrderData2 = LoadedObjectDataObjectMother.CreateLoadedObjectDataStub(_originatingOrder2);

            _fetchedOrderItem1 = DomainObjectMother.CreateFakeObject <OrderItem>();
            _fetchedOrderItem2 = DomainObjectMother.CreateFakeObject <OrderItem>();
            _fetchedOrderItem3 = DomainObjectMother.CreateFakeObject <OrderItem>();

            _fetchedOrderItemData1 = LoadedObjectDataObjectMother.CreateLoadedObjectDataWithDataSourceData(_fetchedOrderItem1);
            _fetchedOrderItemData2 = LoadedObjectDataObjectMother.CreateLoadedObjectDataWithDataSourceData(_fetchedOrderItem2);
            _fetchedOrderItemData3 = LoadedObjectDataObjectMother.CreateLoadedObjectDataWithDataSourceData(_fetchedOrderItem3);

            _fetchedCustomer     = DomainObjectMother.CreateFakeObject <Customer>();
            _fetchedCustomerData = LoadedObjectDataObjectMother.CreateLoadedObjectDataWithDataSourceData(_fetchedCustomer);

            _pendingRegistrationCollector = new LoadedObjectDataPendingRegistrationCollector();
        }
Пример #2
0
        public void PerformEagerFetching(
            ICollection <ILoadedObjectData> originatingObjects,
            IEnumerable <KeyValuePair <IRelationEndPointDefinition, IQuery> > fetchQueries,
            IFetchEnabledObjectLoader fetchResultLoader,
            LoadedObjectDataPendingRegistrationCollector pendingRegistrationCollector)
        {
            ArgumentUtility.CheckNotNull("originatingObjects", originatingObjects);
            ArgumentUtility.CheckNotNull("fetchQueries", fetchQueries);
            ArgumentUtility.CheckNotNull("fetchResultLoader", fetchResultLoader);
            ArgumentUtility.CheckNotNull("pendingRegistrationCollector", pendingRegistrationCollector);

            if (originatingObjects.Count <= 0)
            {
                return;
            }

            foreach (var item in fetchQueries)
            {
                var relationEndPointDefinition = item.Key;
                var fetchQuery = item.Value;

                s_log.DebugFormat(
                    "Eager fetching objects for {0} via query {1} ('{2}').",
                    relationEndPointDefinition.PropertyName,
                    fetchQuery.ID,
                    fetchQuery.Statement);

                var fetchedObjects = fetchResultLoader.GetOrLoadFetchQueryResult(fetchQuery, pendingRegistrationCollector);
                s_log.DebugFormat(
                    "The eager fetch query for {0} yielded {1} related objects for {2} original objects.",
                    relationEndPointDefinition.PropertyName,
                    fetchedObjects.Count,
                    originatingObjects.Count);

                try
                {
                    _registrationAgent.GroupAndRegisterRelatedObjects(relationEndPointDefinition, originatingObjects, fetchedObjects);
                }
                catch (InvalidOperationException ex)
                {
                    throw new UnexpectedQueryResultException("Eager fetching encountered an unexpected query result: " + ex.Message, ex);
                }
            }
        }
Пример #3
0
 public void PerformEagerFetching(ICollection <ILoadedObjectData> originatingObjects, IEnumerable <KeyValuePair <IRelationEndPointDefinition, IQuery> > fetchQueries, IFetchEnabledObjectLoader fetchResultLoader, LoadedObjectDataPendingRegistrationCollector pendingRegistrationCollector)
 {
     throw new NotImplementedException();
 }