如何使用帶有事務的內存數據庫進行單元測試時,如何抑制InMemoryEventId.TransactionIgnoredWarning?

asp.net-core entity-framework-core in-memory-database

我正在使用EF Core內存數據庫,我正在嘗試對使用事務的方法運行單元測試:

using (var transaction = await _context.Database.BeginTransactionAsync())
{
    _context.Update(item);
    result = await _context.SaveChangesAsync();

    // some other stuff

    transaction.Commit();
}

但是,我從測試運行器中收到此錯誤:

System.InvalidOperationException:警告為“InMemoryEventId.TransactionIgnoredWarning”的錯誤異常:內存存儲不支持事務。請參閱http://go.microsoft.com/fwlink/?LinkId=800142要禁止此異常,請使用DbContextOptionsBuilder.ConfigureWarnings API。重寫DbContext.OnConfiguring方法或在應用程序服務提供程序上使用AddDbContext時,可以使用ConfigureWarnings。

如何抑制該錯誤?

一般承認的答案

在聲明內存數據庫的代碼中,配置上下文以忽略該錯誤,如下所示:

public MyDbContext GetContextWithData()
{
    var options = new DbContextOptionsBuilder<MyDbContext>()
        .UseInMemoryDatabase(Guid.NewGuid().ToString())
        // don't raise the error warning us that the in memory db doesn't support transactions
        .ConfigureWarnings(x => x.Ignore(InMemoryEventId.TransactionIgnoredWarning))
        .Options;

    return new MyDbContext(options); 
}

熱門答案

我使用了@tomRedox的答案,但改變它用於ASP.NET Core 2.0 startup.cs文件。

services.AddDbContext<MyDbContext>(options =>
                {
                options.UseInMemoryDatabase("TestDb");
                options.ConfigureWarnings(x => x.Ignore(InMemoryEventId.TransactionIgnoredWarning));
                });


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow