如何使SQLite与JsonObject字段一起工作



我们将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字段一起工作?

Dan,综合考虑,我建议您在单元测试中使用MySQL,如果这是您在生产中使用的。否则,你会遇到几个重大危险:

  • 测试情况与生产不匹配–MySQL和SQLite在处理数据类型方面有很大不同
  • 源代码中充斥着只为处理测试和生产情况之间的这两种数据库类型之间的"阻抗不匹配"而存在的代码
  • "你测试的是什么,"什么测试正确,"就是测试用例代码。"因此,生产用例中的问题会溜走,直到–(ick…(–生产部署才被发现

开发人员可以在自己的笔记本电脑上部署MySQL服务器,其中包含适当的测试数据,服务器IP为127.0.0.1。因此,在这种情况下,这就是我建议你做的(相反(。

最新更新