2014-12-15 34 views
2

Я извлекаю данные из набора файлов JSON в базу данных MS T-SQL, используя Entity Framework.Catchall Table with Entity Framework

В файлах JSON (с подсчетом 20 пока) имеется множество подкатегорий, которые следуют шаблону "CollectionName":{"Code":"SomeCode","Description":"Some Description"}.

Например: "Country":{"Code":"GB","Description":"Great Britain"} или "Language":{"Code":"FR","Description":"French"}

Код я работаю с использований этот шаблон: Объект создается с называется CollectionName, который отображает на столе с ПК, Code & Описание столбцов, а затем другой объект, называемый SourceCollection (ex: PersonLanguage), который сопоставляется с таблицей мостов с исходным PK & CollectionName PK для каждого. Когда у вас много таких небольших подкатегорий, это много таблиц.

Как программист T-SQL, я решил аналогичные проблемы в прошлом, создав «общую таблицу», в которой есть PK, столбец CollectionName, а затем столбец описания &, как указано выше. Таким образом, все эти маленькие коллекции находятся в одной таблице с указателем внешнего ключа в исходной таблице.

Я не могу найти какое-либо описание того, как реализовать это в Entity Framework, может ли кто-нибудь указать мне в правильном направлении либо с помощью ссылки, либо с помощью некоторого примера кода?

ответ

2

Образец, который вы описываете, иногда называют «общей таблицей поиска» и обычно рассматривается как анти-шаблон по причинам ссылочной целостности и ограничений.

Заслуги дизайнерского решения в стороне, у вас есть два варианта:

А) Создать новый EF объект со свойствами для Id, CollectionName, кода и описанием и сопоставляются существующие классы и данных для этого объекта для CRUD операций через некоторый шаблон, такой как репозиторий.

B) Использовать наследование типа EF с отображением таблицы на иерархию и разрешить EF отображать несколько объектов в одну и ту же таблицу. Абстрактный тип родительского типа имеет свойства Id, Code и Description. EF автоматически создаст столбец дискриминатора, который будет работать с той же целью, что и CollectionName.

+0

Спасибо - на этом я решил отказаться от всеобъемлющего подхода. Очень признателен. – EDFlink