使用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
。实际上它很有效,这仅适用于单元测试。