EF Core 2.1 内存数据库不更新记录

Chr*_*nty 6 entity-framework-core

我正在使用内存数据库提供程序进行集成测试,但是我似乎无法更新记录。我已经针对真实的 SQL 数据库运行了相同的代码,并且一切都得到了很好的更新。这是我的测试装置代码。

测试夹具:

public class TestFixture<TStartup> : IDisposable
{
    private readonly TestServer _testServer;
    public HttpClient TestClient { get; }
    public IDatabaseService DbContext { get { return _testServer.Host.Services.GetService<DatabaseService>(); } }

    public TestFixture() : this(Path.Combine("src")) { }

protected TestFixture(string relativeTargetProjectPatentDir)
{
    Environment.SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "Testing");

    var builder = new WebHostBuilder()
        .ConfigureServices(services =>
        {
            services.AddDbContext<DatabaseService>(options =>
                options.UseInMemoryDatabase("TestDB")
                .EnableSensitiveDataLogging());
        })
        .UseEnvironment("Testing")
        .UseStartup<Startup>();

    _testServer = new TestServer(builder)
    {
        BaseAddress = new Uri("http://localhost:5010")
    };

    TestClient = _testServer.CreateClient();
    TestClient.BaseAddress = _testServer.BaseAddress;
}

    public void Dispose()
    {
        TestClient.Dispose();
        _testServer.Dispose();
    }
}
Run Code Online (Sandbox Code Playgroud)

我花了一天的大部分时间在谷歌上搜索这个问题,但没有遇到任何其他人谈论它,所以我假设这可能是我的问题而不是 EF bug。我确信有人会注意到您无法更新的数据库。

小智 6

更新适用于 Singleton,但我有 CQRS 架构,为了检查条目是否在 e2e 测试中更新,我必须重新加载条目

Context.Entry(entity).Reload();
Run Code Online (Sandbox Code Playgroud)

我希望这可以帮助某人


Chr*_*nty 4

事实证明,将测试装置中 DbContext 的生命周期更改为单例解决了我的问题。