строка.Ошибка соединения, разделитель не отображается в строке

#c# #string #entity-framework #join #asp.net-core-2.0

#c# #строка #entity-framework #Присоединиться #asp.net-core-2.0

Вопрос:

У меня есть класс Articulos, где у меня есть столбец с именем Genero, который является ICollection. В представлении у меня есть список множественного выбора, который прикреплен к нему, что я делаю для сохранения выбора в ApplicationDbContext я преобразую ICollection в длинную строку с помощью string.Join() и сохраните его.

Проблема в том, что строка, которую он сохраняет без разделителя, в моем случае я использую «,», но похоже, что метод игнорирует это.

Вот столбец в классе:

 [Required]
 public ICollection<string> Genero { get; set; }
  

Это часть контекста БД:

  modelBuilder.Entity<Articulo>().Property(e => e.Genero)
                .HasConversion(
                v => string.Join(",", v),
                v => v.Split(",", StringSplitOptions.RemoveEmptyEntries));
  

Когда я сохраняю строку, она должна показывать что-то вроде:
Террор, приостановка, Анимада…

Но вместо этого он показывает мне: TerrorSuspensoAnimada

Я работаю над ASP.Net Ядро 2.2

Комментарии:

1. Можете ли вы поделиться тем, что HasConversion есть / делает?

2. Это метод, который настраивает свойство таким образом, что значение преобразуется в заданный тип перед записью в базу данных и преобразуется обратно при чтении из базы данных. ссылка @John

3. Каков тип первого во время компиляции v , то есть v in string.Join(",", v) ? Можете ли вы навести указатель мыши на это v и посмотреть, что там написано? Вероятно, вы получаете другую перегрузку Join , чем вы думаете. Если вы попробуете вместо этого, string.Join(",", v.AsEnumerable()) что произойдет? РЕДАКТИРОВАТЬ: я вижу, что вы пишете ',' в вопросе. Можете ли вы проверить и посмотреть, нет ли у вас "," в реальном коде? Пожалуйста, сделайте код вопроса как можно более точным.

4. @JeppeStigNielsen, извините, это была ошибка «,». Что касается вашего вопроса, когда я навожу курсор мыши на v, он говорит: (параметр) IColecction<строка> v. Я сделал то, что вы предлагаете, и отметил ошибку: ICollection не содержит определения для AsEnumerable() и не найден доступный метод.

5. Хорошо, AsEnumerable() требуется using System.Linq; директива в верхней части файла. Но это, вероятно, ничего не решит. Для @John, я думаю, HasConversion может быть это перегрузка: PropertyBuilder<TProperty>.HasConversion<TProvider> перегрузка