我们将EF Core MySQL(Pomelo)用于.NET Core项目,并且我们具有使用SQLite内存数据库的xUnit测试设置。我们正在配置一个JSON列,该列在MySQL中工作正常,但在我们的测试中不起作用。正如我们在下面看到的那样,我们尝试在测试过程中添加ValueConverter,以使SQLite改为将JsonObject视为字符串,但似乎被完全忽略了。我们还尝试将列类型强制为“ varchar(MAX)”。
class FooBar
{
[Column(TypeName = "json")]
public JsonObject<Dictionary<string, object>> Foo { get; set; }
}
class FooBarDbContext : DbContext
{
public DbSet<FooBar> FooBars { get; set; }
protected override void OnModelCreating(ModelBuilder builder)
{
// only during testing.
builder.Entity<FooBar>().Property(fooBar => fooBar.Foo).HasConversion(
v => v.ToString(),
v => new JsonObject<Dictionary<string, object>>(v)).HasColumnType("varchar(MAX)");
}
}
如何使SQLite与JsonObject字段一起使用?
答案 0 :(得分:1)
Dan,考虑到所有因素,我向您推荐的建议是,如果您在生产中使用了 MySQL ,则应将其用于单元测试。否则,您会遇到几个重大危险:
开发人员 可以在自己的笔记本电脑上部署MySQL服务器,并在其中包含适当的测试数据,并且服务器IP为127.0.0.1
。因此,在这种情况下,我建议您这样做(而不是这样做)。