在先前版本的Entity Framework中,我一直在使用Effort( https://effort.codeplex.com/ )进行单元测试。我决定为EF Core提供新的内存提供程序,并很快发现它不支持在OnModelCreating中设置的IsRequired()和其他实体配置。有没有办法让它尊重这种配置?如果没有,这是否在todo列表中实现?甚至可能是内存提供商的另类选择?
我希望能够使用测试步骤来交换上下文,并在一些可以利用相同代码的集成测试场景中使用真正的数据库。这似乎是“很高兴”,也许这就是EF Core的努力。我找不到任何关于为EF Core工作的努力。
我在EF的Uservoice页面上找不到任何内容( https://data.uservoice.com/forums/72025-entity-framework-feature-suggestions ),如果它不可用,它将会在那里找到。
很久以前就问了这个问题,但我遇到了同样的问题,偶然发现了这个悬而未决的问题。我最终找到了一个对我有用的答案,所以我想我会分享以防其他人像我一样碰到这个。
似乎SQLite有一个内存选项,它比标准的UseInMemory()选项更像真正的数据库: https ://docs.microsoft.com/en-us/ef/core/miscellaneous/testing/sqlite
唯一的区别是我添加了Microsoft.EntityFrameworkCore.Sqlite ,而不是像文档那样的Microsoft.Data.Sqlite 。
与问题不完全相关,但在我的特定情况下,我想在内存中使用内存,而我正在测试我正在研究的webapi的基本功能,但我仍然希望能够测试独特的约束等。是我为实现内存数据库而添加的内容。
services.AddDbContext<MyDbContext>(options =>
{
var liteConn = new SqliteConnection("DataSource=:memory:");
liteConn.Open();
options
.UseSqlite(liteConn)
.ConfigureWarnings(warnings =>
{
warnings.Throw(RelationalEventId.QueryClientEvaluationWarning);
warnings.Log(RelationalEventId.ExecutedCommand);
});
});
if (env.IsDevelopment())
{
var context = app.ApplicationServices.GetRequiredService<MyDbContext>();
context.Database.EnsureCreated();
}