我们将ef core mysql(pomelo)用于.net核心项目,并且我们有一个使用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字段一起工作?
1条答案
按热度按时间mlnl4t2r1#
丹,综合考虑,我建议您使用mysql进行单元测试,如果您在生产中使用mysql的话。否则,您会遇到几个重大危险:
测试情况与生产环境不匹配–mysql和sqlite在处理数据类型方面有很大的不同。
源代码中充斥着只用于处理两种数据库类型之间以及测试和生产情况之间的“阻抗不匹配”的代码。
“您测试的是什么”,正确测试的是“测试用例代码”。因此,生产用例中的问题会逐渐消失,直到–(ick…)–生产部署才被发现。
开发人员可以在自己的笔记本电脑上部署mysql服务器,其中包含适当的测试数据,服务器ip为
127.0.0.1
. 所以,在这种情况下,我建议你这样做。