Как заставить SQLite работать с полем JsonObject? - PullRequest
0 голосов
/ 14 декабря 2018

Мы используем EF Core MySQL (Pomelo) для проекта .NET Core, и у нас есть настройка теста xUnit с использованием базы данных SQLite в памяти.Мы настраиваем столбец 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 Ответ

0 голосов
/ 14 декабря 2018

Дэн, учитывая все обстоятельства, я рекомендую вам использовать MySQL для своих юнит-тестов, если это то, что вы используете в производстве.В противном случае вы столкнетесь с несколькими существенными опасностями:

  • Ситуация с тестированием не соответствует производственной - MySQL и SQLite очень сильно различаются в обработке типов данных.
  • Исходный кодстановится замусоренным кодом, который существует только для обработки «несоответствия импеданса» между двумя типами базы данных и между тестом и производственной ситуацией.
  • «Что вы тестируете» и какие тестыправильно, «это код тестового случая».Таким образом, проблемы в производственном случае исчезают и не обнаруживаются до - (ick ...) - производственного развертывания.

Разработчики могут развертывать серверы MySQLна своих ноутбуках, с соответствующими тестовыми данными внутри, с IP-адресом сервера 127.0.0.1.И вот, в этой ситуации это то, что я советую вам сделать (вместо этого).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...