public RdbmsProviderCommandFactory(
            RdbmsProviderDefinition storageProviderDefinition,
            IDbCommandBuilderFactory dbCommandBuilderFactory,
            IRdbmsPersistenceModelProvider rdbmsPersistenceModelProvider,
            IObjectReaderFactory objectReaderFactory,
            ITableDefinitionFinder tableDefinitionFinder,
            IDataStoragePropertyDefinitionFactory dataStoragePropertyDefinitionFactory)
        {
            ArgumentUtility.CheckNotNull("storageProviderDefinition", storageProviderDefinition);
            ArgumentUtility.CheckNotNull("dbCommandBuilderFactory", dbCommandBuilderFactory);
            ArgumentUtility.CheckNotNull("rdbmsPersistenceModelProvider", rdbmsPersistenceModelProvider);
            ArgumentUtility.CheckNotNull("objectReaderFactory", objectReaderFactory);
            ArgumentUtility.CheckNotNull("tableDefinitionFinder", tableDefinitionFinder);
            ArgumentUtility.CheckNotNull("dataStoragePropertyDefinitionFactory", dataStoragePropertyDefinitionFactory);

            _storageProviderDefinition            = storageProviderDefinition;
            _dbCommandBuilderFactory              = dbCommandBuilderFactory;
            _rdbmsPersistenceModelProvider        = rdbmsPersistenceModelProvider;
            _objectReaderFactory                  = objectReaderFactory;
            _tableDefinitionFinder                = tableDefinitionFinder;
            _dataStoragePropertyDefinitionFactory = dataStoragePropertyDefinitionFactory;

// ReSharper disable DoNotCallOverridableMethodsInConstructor
            _lookupCommandFactory         = CreateLookupCommandFactory();
            _relationLookupCommandFactory = CreateRelationLookupCommandFactory();
            _saveCommandFactory           = CreateSaveCommandFactory();
            _queryCommandFactory          = CreateQueryCommandFactory();
// ReSharper restore DoNotCallOverridableMethodsInConstructor
        }
        public override void SetUp()
        {
            base.SetUp();

            _tableDefinitionFinder = new TableDefinitionFinder(new RdbmsPersistenceModelProvider());

            _dbCommandBuilderFactoryStrictMock = MockRepository.GenerateStrictMock <IDbCommandBuilderFactory>();
            _objectReaderFactoryStrictMock     = MockRepository.GenerateStrictMock <IObjectReaderFactory>();
            _dbCommandBuilder1Stub             = MockRepository.GenerateStub <IDbCommandBuilder>();
            _dbCommandBuilder2Stub             = MockRepository.GenerateStub <IDbCommandBuilder>();
            _timestampReader1Stub     = MockRepository.GenerateStub <IObjectReader <Tuple <ObjectID, object> > > ();
            _timestampReader2Stub     = MockRepository.GenerateStub <IObjectReader <Tuple <ObjectID, object> > > ();
            _dataContainerReader1Stub = MockRepository.GenerateStub <IObjectReader <DataContainer> > ();
            _dataContainerReader2Stub = MockRepository.GenerateStub <IObjectReader <DataContainer> > ();

            _factory = new LookupCommandFactory(
                TestDomainStorageProviderDefinition,
                _dbCommandBuilderFactoryStrictMock,
                _objectReaderFactoryStrictMock,
                _tableDefinitionFinder);

            _tableDefinition1 = TableDefinitionObjectMother.Create(TestDomainStorageProviderDefinition);
            _tableDefinition2 = TableDefinitionObjectMother.Create(TestDomainStorageProviderDefinition);

            _objectID1 = CreateObjectID(_tableDefinition1);
            _objectID2 = CreateObjectID(_tableDefinition1);
            _objectID3 = CreateObjectID(_tableDefinition2);
        }