コード例 #1
0
        protected virtual IStorageProviderCommand <IEnumerable <DataContainer>, IRdbmsProviderCommandExecutionContext> CreateForIndirectRelationLookup(
            UnionViewDefinition unionViewDefinition,
            RelationEndPointDefinition foreignKeyEndPoint,
            ObjectID foreignKeyValue,
            SortExpressionDefinition sortExpression)
        {
            var selectedColumns  = unionViewDefinition.ObjectIDProperty.GetColumns();
            var dbCommandBuilder = _dbCommandBuilderFactory.CreateForSelect(
                unionViewDefinition,
                selectedColumns,
                GetComparedColumns(foreignKeyEndPoint, foreignKeyValue),
                GetOrderedColumns(sortExpression));

            var objectIDReader = _objectReaderFactory.CreateObjectIDReader(unionViewDefinition, selectedColumns);

            var objectIDLoadCommand = new MultiObjectIDLoadCommand(new[] { dbCommandBuilder }, objectIDReader);
            var indirectDataContainerLoadCommand = new IndirectDataContainerLoadCommand(objectIDLoadCommand, _storageProviderCommandFactory);

            return(DelegateBasedCommand.Create(
                       indirectDataContainerLoadCommand,
                       lookupResults => lookupResults.Select(
                           result =>
            {
                Assertion.IsNotNull(
                    result.LocatedObject,
                    "Because ID lookup and DataContainer lookup are executed within the same database transaction, the DataContainer can never be null.");
                return result.LocatedObject;
            })));
        }
コード例 #2
0
        public override void SetUp()
        {
            base.SetUp();

            _fakeResult = new ObjectLookupResult <DataContainer> [0];
            _objectID1  = DomainObjectIDs.Order1;
            _objectID2  = DomainObjectIDs.Order3;
            _commandExecutionContextStub = MockRepository.GenerateStub <IRdbmsProviderCommandExecutionContext>();
            _commandExecutionContextStub = MockRepository.GenerateStub <IRdbmsProviderCommandExecutionContext>();

            _objectIDLoadCommandStub = MockRepository.GenerateStub <IStorageProviderCommand <IEnumerable <ObjectID>, IRdbmsProviderCommandExecutionContext> >();
            _objectIDLoadCommandStub.Stub(stub => stub.Execute(_commandExecutionContextStub)).Return(new[] { _objectID1, _objectID2 });

            _dataContainerLoadCommandStub =
                MockRepository.GenerateStub <IStorageProviderCommand <ObjectLookupResult <DataContainer>[], IRdbmsProviderCommandExecutionContext> >();
            _dataContainerLoadCommandStub.Stub(stub => stub.Execute(_commandExecutionContextStub)).Return(_fakeResult);

            _storageProviderFactoryStub = MockRepository.GenerateStub <IStorageProviderCommandFactory <IRdbmsProviderCommandExecutionContext> >();
            _storageProviderFactoryStub
            .Stub(stub => stub.CreateForSortedMultiIDLookup(Arg <ObjectID[]> .List.Equal(new[] { _objectID1, _objectID2 })))
            .Return(_dataContainerLoadCommandStub);

            _loadCommand = new IndirectDataContainerLoadCommand(_objectIDLoadCommandStub, _storageProviderFactoryStub);
        }