Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public TDbContext Activate<TDbContext>(DbContextOperationEnlistmentStrategy oper

db = (TDbContext)ActivatorUtilities.CreateInstance(serviceProvider, typeof(TDbContext), optionsBuilder.Options);

if (isCommand == false)
if (isCommand == false && operationEnlistmentStrategy != DbContextOperationEnlistmentStrategy.Suppress)
{
db.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;
db.SavingChanges += Db_SavingChanges;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@ public class DbContextActivatorTests : IDisposable
private TransactionScopeState? transactionScopeState;

[Fact]
public async Task Activate_Should_CreateEnlistedDbContext_WhenDefaultStrategyAndTransactionOpened()
public async Task Activate_Should_CreateEnlistedDbContext_WhenDefaultStrategyAndCommand()
{
await OpenTransaction();
await OpenTransaction(isCommand: true);

using var db = activator.Activate<TestDbContext>();

Expand All @@ -29,17 +29,17 @@ public async Task Activate_Should_CreateEnlistedDbContext_WhenDefaultStrategyAnd
[Fact]
public async Task Activate_Should_CreateIndependentDbContext_WhenDefaultStrategyAndQuery()
{
SetQuery();
await OpenTransaction(isCommand: false);

using var db = activator.Activate<TestDbContext>();

db.Database.CurrentTransaction.ShouldBeNull();
}

[Fact]
public async Task Activate_Should_CreateEnlistedDbContext_WhenRequiredStrategyAndTransactionOpened()
public async Task Activate_Should_CreateEnlistedDbContext_WhenRequiredStrategyAndCommand()
{
await OpenTransaction();
await OpenTransaction(isCommand: true);

using var db = activator.Activate<TestDbContext>(DbContextOperationEnlistmentStrategy.Required);

Expand All @@ -49,7 +49,7 @@ public async Task Activate_Should_CreateEnlistedDbContext_WhenRequiredStrategyAn
[Fact]
public async Task Activate_Should_CreateIndependentDbContext_WhenRequiredStrategyAndQuery()
{
SetQuery();
await OpenTransaction(isCommand: false);

using var db = activator.Activate<TestDbContext>(DbContextOperationEnlistmentStrategy.Required);

Expand Down Expand Up @@ -103,9 +103,9 @@ public async Task Activate_Should_Throw_WhenRequiredStrategyAndTransactionNotSet
}

[Fact]
public async Task Activate_Should_CreateEnlistedDbContext_WhenOptionalStrategyAndTransactionOpened()
public async Task Activate_Should_CreateEnlistedDbContext_WhenOptionalStrategyAndCommand()
{
await OpenTransaction();
await OpenTransaction(isCommand: true);

using var db = activator.Activate<TestDbContext>(DbContextOperationEnlistmentStrategy.Optional);

Expand All @@ -115,7 +115,7 @@ public async Task Activate_Should_CreateEnlistedDbContext_WhenOptionalStrategyAn
[Fact]
public async Task Activate_Should_CreateIndependentReadOnlyDbContext_WhenOptionalStrategyAndQuery()
{
SetQuery();
await OpenTransaction(isCommand: false);

using var db = activator.Activate<TestDbContext>(DbContextOperationEnlistmentStrategy.Optional);

Expand All @@ -139,13 +139,27 @@ public async Task Activate_Should_CreateIndependentModifiableDbContext_WhenOptio
}

[Fact]
public async Task Activate_Should_CreateIndependentDbContext_WhenSuppressStrategyAndTransaction()
public async Task Activate_Should_CreateIndependentModifiableDbContext_WhenSuppressStrategyAndCommand()
{
await OpenTransaction();
await OpenTransaction(isCommand: true);

using var db = activator.Activate<TestDbContext>(DbContextOperationEnlistmentStrategy.Suppress);

db.Database.CurrentTransaction.ShouldBeNull();

await db.SaveChangesAsync();
}

[Fact]
public async Task Activate_Should_CreateIndependentModifiableDbContext_WhenSuppressStrategyAndQuery()
{
await OpenTransaction(isCommand: false);

using var db = activator.Activate<TestDbContext>(DbContextOperationEnlistmentStrategy.Suppress);

db.Database.CurrentTransaction.ShouldBeNull();

await db.SaveChangesAsync();
}

public DbContextActivatorTests()
Expand Down Expand Up @@ -201,19 +215,16 @@ public DbContextActivatorTests()
activator = new DbContextActivator(operationContextMock.Object, connectionStringProviderMock.Object, dbOptionsConfiguratorMock.Object, serviceProviderMock.Object);
}

private async Task OpenTransaction()
private async Task OpenTransaction(bool isCommand)
{
DbContextOptionsBuilder<FrameworkDbContext> optionsBuilder = new DbContextOptionsBuilder<FrameworkDbContext>();
optionsBuilder.UseSqlite("DataSource=:memory:");
var db = new FrameworkDbContext(optionsBuilder.Options);

transactionScopeState!.DbContext = db;
transactionScopeState!.DbContextTransaction = await db.Database.BeginTransactionAsync();
}

private void SetQuery()
{
operationContextState!.IsCommand = false;
operationContextState!.IsCommand = isCommand;
}

public void Dispose()
Expand Down