gpt4 book ai didi

c# - 如何使 SQLite 使用 JsonObject 字段?

转载 作者:行者123 更新时间:2023-11-29 02:40:24 25 4
gpt4 key购买 nike

我们将 EF Core MySQL (Pomelo) 用于 .NET Core 项目,并且我们有一个使用 SQLite 内存数据库的 xUnit 测试设置。我们正在配置一个在 MySQL 中运行良好但在我们的测试中不起作用的 JSON 列。我们已经尝试添加一个 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。因此,在这种情况下,我建议您(改为)这样做。

关于c# - 如何使 SQLite 使用 JsonObject 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53782587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com