Как правильно в EF core (code first) организовать работу с колонками таблицы составного типа?
Изучаю EF core и работу с Postgres, столкнулся с проблемой организации учета товаров на с кладе.
Например:
есть более 2-х таблиц для хранения совершенно разных по структуре документов, приходная накладная, расходная накладная, списание, перемещение и т.д...
и есть одна таблица с записями отражающими какие-то изменения, например движение товара на складе.
Надо чтобы в одной из колонок хранилось значение того, к кому относится эта запись, т.е. ссылка на накладную...
Пробовал с наследованием, но TPT не поддерживается в ef core, а вариант с TPH не устраивает, т.к. получается очень громоздкая таблица.
Я бы смотрел в сторону вынесения уникальной части в json, а то что повторяется оставлять в обычных столбцах SQL. На стороне сервера можно добавлять в сущность поле, которое будет парсить из json строки объект. Нужно добавить в конфигурацию игнорирование этого поля.
Либо 2й вариант. Таблица на тип и потом сделать вьюшку которая их объединяет по общим колонкам. Общие данные можно получать для всех с одной въюшки, подробности получаем из конкретной таблицы.
1. json отпадает, т.к. нужнен отбор и сортировка
2. тоже склоняюсь к этому решению, но оно избыточно, интересует больше как сделать именно на EF то что поддерживает сам postgres , да и MSSQL тоже.
Sergey, поиск и сортировка возможны с использованием вычисляемых свойств. Делаете вычисляемое свойство через jsonpath (персистентное) и на него накидываете индекс.
PS.
stored поддерживается в PostgreSQL начиная с 12 версии, если у вас меньше то видимо не выйдет. Но вообще в PostgreSQL есть возможность создать индекс на поле jsonb. Правда я не уверен что он будет работать если сделать jsonb индекс + вычисляемое поле без опции stored.