Сохранить HashSet <string>в Entity Framework Core - PullRequest
1 голос
/ 12 ноября 2019

Это моя текущая модель EF Core:

public class Application
{
    [Key]
    public string Name { get; set; }
    public HashSet<string> Fields { get; set; }
}

Свойство hashset не работает само по себе, поэтому я добавил это в OnModelCreating:

modelBuilder.Entity<Application>()
     .Property(e => e.Fields)
     .HasConversion(
        v => v.ToArray(),
        v => new HashSet<string>(v));

Это работает в некоторых случаях, но есть большая проблема с ним.

Когда я вставляю приложение изначально, хешсет корректно преобразуется в строковый массив, и драйвер базы данных postgresql сохраняет его правильно.

Однако, когда я позже получу приложение снова, изменим хэш-набор, а затем вызову .SaveChanges();, оно не работает!

Я должен явно вызвать ctx.Update(app);, чтобы изменения были сохранены.

Я думаю, это потому, что экземпляр HashSet<string> не изменяется, меняется только его содержимое, поэтому средство отслеживания изменений не сможет увидеть какие-либо изменения (но, возможно, я ошибаюсь в этом рассуждении).

Как я могу это исправить?

В приведенном здесь примере есть только один HashSet, но другие модели будут иметь гораздо больше свойств, которые будут страдать от той же проблемы.

  • Есть ли способ внести изменения в трекВы знаете об этих изменениях?
  • Может быть, есть какой-нибудь способ реализовать пользовательскую коллекцию, которая уведомит свой "контейнер" о том, что она была изменена?
  • Возможно ли сказатьEF для проверки значения после преобразования вместо самого хэш-набора?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...