使用关系数据,架构和事务测试EF Core

时间:2018-02-05 10:41:02

标签: entity-framework ef-core-2.0

使用EF Core(2.0.1)创建单元测试时遇到问题。

我使用以下选项创建我的数据库:

var options = new DbContextOptionsBuilder<MyContext>()
    .UseInMemoryDatabase(Guid.NewGuid().ToString())
    .ConfigureWarnings((b) =>
    {
        b.Ignore(InMemoryEventId.TransactionIgnoredWarning);
    })
    .Options; 

我想测试的代码看起来像这样:

using (IDbContextTransaction transaction = await context.Database.BeginTransactionAsync())
{
    await context.Database.ExecuteSqlCommandAsync("DELETE FROM fooSchema.Customers WHERE ID = {0}", id);
    await context.SaveChangesAsync();

    // Other stuff...

    context.Customers.Add(fooCustomer);
    await context.SaveChangesAsync();
 }

首先,我遇到了InMemory不支持交易的问题。我使用ConfigureWarnings解决了它,如代码所示。但事实证明,InMemory并没有处理ExecuteSqlCommandAsync。所以我尝试了SQLLite,但它并没有处理自定义模式。

如何创建一个DbContext,没有任何&#34;真正的&#34; DB,处理事务,模式和ExecuteSqlCommandAsync?

可以从ExecuteSqlCommandAsync抑制错误。但我找不到EventId。实际上它很有效,这仅适用于单元测试。

0 个答案:

没有答案