Passing_a_transaction_to_UseStoreTransaction_when_it_is_already_enlisted_in_a_TransactionScope_Transaction_throws_InvalidOperationException() { var dbConnectionMock = new Mock<DbConnection>(MockBehavior.Strict); dbConnectionMock.SetupGet(m => m.State).Returns(() => ConnectionState.Open); dbConnectionMock.Setup(m => m.EnlistTransaction(It.IsAny<Transaction>())).Verifiable(); var metadataWorkspaceMock = new Mock<MetadataWorkspace>(MockBehavior.Strict); metadataWorkspaceMock.Setup(m => m.IsItemCollectionAlreadyRegistered(DataSpace.SSpace)).Returns(true); using (new TransactionScope()) { var entityConnection = new EntityConnection(metadataWorkspaceMock.Object, dbConnectionMock.Object, true, true); entityConnection.EnlistTransaction(Transaction.Current); var dbTransactionMock = new Mock<DbTransaction>(); dbTransactionMock.Protected().SetupGet<DbConnection>("DbConnection").Returns(() => dbConnectionMock.Object); Assert.Equal( Strings.DbContext_TransactionAlreadyEnlistedInUserTransaction, Assert.Throws<InvalidOperationException>(() => entityConnection.UseStoreTransaction(dbTransactionMock.Object)) .Message); } }
public void Should_use_interception() { var mockConnection = new Mock<DbConnection>(); mockConnection.SetupGet(m => m.DataSource).Returns("Foo"); mockConnection.SetupGet(m => m.State).Returns(ConnectionState.Open); var mockStoreItemCollection = new Mock<StoreItemCollection>(); mockStoreItemCollection .SetupGet(m => m.ProviderFactory) .Returns(DbProviderServices.GetProviderFactory(new SqlConnection())); var mockMetadataWorkspace = new Mock<MetadataWorkspace>(); mockMetadataWorkspace .Setup(m => m.GetItemCollection(DataSpace.SSpace)) .Returns(mockStoreItemCollection.Object); var transaction = new CommittableTransaction(); var connectionInterceptorMock = new Mock<IDbConnectionInterceptor>(); connectionInterceptorMock .Setup(m => m.EnlistingTransaction(mockConnection.Object, It.IsAny<EnlistTransactionInterceptionContext>())) .Callback<DbConnection, EnlistTransactionInterceptionContext>( (_, c) => { Assert.Same(transaction, c.Transaction); }); connectionInterceptorMock .Setup(m => m.EnlistedTransaction(mockConnection.Object, It.IsAny<EnlistTransactionInterceptionContext>())) .Callback<DbConnection, EnlistTransactionInterceptionContext>( (_, c) => { Assert.Same(transaction, c.Transaction); }); DbInterception.Add(connectionInterceptorMock.Object); try { var connection = new EntityConnection( mockMetadataWorkspace.Object, mockConnection.Object, true, true); connection.EnlistTransaction(transaction); } finally { DbInterception.Remove(connectionInterceptorMock.Object); } connectionInterceptorMock.Verify( m => m.EnlistingTransaction(mockConnection.Object, It.IsAny<EnlistTransactionInterceptionContext>()), Times.Once()); connectionInterceptorMock.Verify( m => m.EnlistedTransaction(mockConnection.Object, It.IsAny<EnlistTransactionInterceptionContext>()), Times.Once()); mockConnection.Verify(m => m.EnlistTransaction(It.IsAny<Transaction>()), Times.Once()); connectionInterceptorMock.Verify( m => m.StateGetting(It.IsAny<DbConnection>(), It.IsAny<DbConnectionInterceptionContext<ConnectionState>>()), Times.Once()); connectionInterceptorMock.Verify( m => m.StateGot(It.IsAny<DbConnection>(), It.IsAny<DbConnectionInterceptionContext<ConnectionState>>()), Times.Once()); mockConnection.Verify(m => m.State, Times.Once()); }