Entity Framework Code First и коллекции примитивных типов

При создании классов POCO, которые содержат коллекции примитивных типов и сохраняются EF Code First, лучший совет, который я нашел до сих пор, это создать новый класс, который имеет ID плюс примитивный тип:

Entity Framework and Models with Simple Arrays

Если сейчас у меня есть несколько классов, которые требуют свойств типа ObservableCollection, и я заменю их на ObservableCollection (где EntityString - это пользовательский тип с Id и свойством string), В итоге я получаю таблицу EntityString, которая имеет несколько столбцов внешнего ключа, по одному для каждого свойства типа ObservableCollection во всех конкретных типах с такими свойствами.

Это приводит к раздуванию в основном нулевых столбцов внешних ключей в таблице EntityString.

Одним из подходов было бы создание подкласса EntityString и использование модели Table per Type для этих подклассов. Однако это требует внесения неудобных изменений в объектную модель просто для того, чтобы приспособить Entity Framework.

Вопросы:

  • Является ли инкапсулирующий тип лучшим способом управления Collection?
  • Если да, то каковы плюсы и минусы разрешения нескольких (многих) столбцов внешнего ключа по сравнению с созданием пользовательских таблиц для каждого типа (ценой неудобной модели)?

10
задан Community 23 May 2017 в 12:09
поделиться