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