Я перевожу старое ASP-приложение на современную версию .NET, чтобы сократить время разработки, которую мы рассматриваем .NET 4.0 Entity Framework. Однако мы, похоже, столкнулись с этой проблемой в нашей разработке.
Дается небольшая часть нашей базы данных:
Таблица OBJECT, которая содержит список автомобилей и их соответствующих свойств. У нас также есть таблица OBJECT_OPTIONS, которая содержит для данного автомобиля в OBJECT список ОПЦИИ, АКСЕССУАРЫ и СТАНДАРТНОЕ ОБОРУДОВАНИЕ. Эти три типа имеют одинаковые поля и поэтому хранятся в одной и той же таблице. Столбец ncopt_type используется для различения разных списков. Возможные значения: «opt», «acc» и «sta». Таблица OBJECT_OPTIONS связывается с OBJECT через ncopt_obj_id, который представляет уникальный автомобиль (obj_id) в таблице OBJECT.
Наша цель - предоставить объекту OBJECT 3 свойства, которые связаны с различными списками OBJECT_OPTIONS:
- Варианты собственности
- имущество АКСЕССУАРЫ
- имущество СТАНДАРТНОЕ ОБОРУДОВАНИЕ
Мы пробовали различные учебные пособия и пошаговые руководства, касающиеся таблиц на иерархию с помощью модели наследования, но не смогли создать построимую модель.
Технически, то, что мы сделали, было:
- Создать объект ОБЪЕКТ
- Создать объект OBJECT_OPTIONS, сделать его абстрактным
- Добавить сущности OPTION, ACCESSORY и STANDARD_EQUIP, используя базовый тип OBJECT_OPTIONS
- Добавить условия во все три таблицы в ncopt_type = '...'
- Добавить 3 навигационных свойства в OBJECT, все из которых связаны с одним из унаследованных объектов: OPTIONS, ACCESSORIES и STANDAARD_EQUIPMENT
Во время этой настройки появляется куча ошибок, но в итоге мы получаем следующее:
Ошибка 3032: проблема в отображении фрагментов, начинающихся со строк 250, 286: EntityTypes NCO.Model.OPTION, NCO.Model.ACCESSOIRE, NCO.Model.STANDAARD_EQUIP отображаются в те же строки в таблице OBJECT_OPTIES. Условия сопоставления можно использовать для различения строк, в которые сопоставляются эти типы.
На всех трех объектах присутствует условие.
Я не нашел решения этой проблемы и потратил слишком много времени на нее. В настоящее время мы используем обходной метод, но нам хотелось бы исправить это, так как к концу проекта эта ситуация проявится еще несколько раз.
Любая помощь приветствуется, если вам нужна дополнительная информация, пожалуйста, напишите мне комментарий или по электронной почте.