none
Entity Framework + Dynamic Data - не работает наследование RRS feed

  • Вопрос

  • В БД есть две таблицы Staff и User. Первая - общая информация о персоне (id, ФИО и т.п.), вторая - User - расширение таблицы Staff для описания пользователей (не все человеки из БД ими являются). Содержит поля staff_id, login и т.п.
    В модели Entity Framework реализовал наследование User от Staff, протестировал в консольном приложении - всё рабоате как следует.
    Создал новый  сайт Dynamic Data, подключил эту модель к нему. Другие таблицы из модели работают как надо, только сущности User нет вообще, а при попытке перейти на Staff вываливается ошибка:

    Определенный запрос имеет полиморфный или абстрактный возвращаемый тип. Определите фильтр
    EntityTypeFilter, чтобы ограничить запрос одним устойчивым типом.


    Где нужно определять этот тип ?

    Скачал Dynamic Data Preview 4, там пример с аналогичным наследованием, работает. Там же есть шаблон EntityFrameworkProject, попытался подключить свою модель к нему. При запуске в методе Page_Load на строке System.Collections.IList visibleTables = Global.DefaultModel.VisibleTables;
    происходит исключение An error occurred during model registration and this operation cannot be performed.

    Тоже не лучше... Что  с этим делать?
    8 октября 2009 г. 10:24

Ответы

  • Проблема решается просто. Нужно всё-таки использовать шаблон проекта EntityFrameworkProject из архива Dynamic Data Preview 4. Дело в том, что при открытии его как отдельного проекта, всё работает, т.к  он использует обновленные версии dll из своей папки CommonFiles (в этом же шаблоне проекта лежит), а при попытке включить этот проект в существующее решение эти сборки почему-то меняются на аналогичные стандартные сборки из установленного Framework. Просто пришлось вручную их удалить и явно указать из эти dll из папки CommonFiles.
    • Помечено в качестве ответа I.Vorontsov 12 октября 2009 г. 6:18
    12 октября 2009 г. 6:05

Все ответы

  • Спасибо за оперативный ответ, но статья про наследование немного не про то, что у меня. Там из одной таблицы в БД создают две сущности в модели, а у меня две таблицы в БД уже представляют наследование. И, похоже, у меня проблема все-таки с Dynamic Data, а не с самой моделью.

    Я попробовал сделать такой же проект Dynamic Data на VS2010, построил модель по тем же таблицам и все заработало с первого раза! Люди отдельно, пользователи отдельно, причем последние дополнены данными из первой сущности как и следует. Проект использует Framework 4.0, при смене на 3.5 отваливаются ссылки на System.Web.Entity, System.Web.DynamicData и другие.
    Что же получается, мне не удастся сделать всё в VS2008 на FW3.5 ? Может нужно обновить какие-то компоненты?
    8 октября 2009 г. 12:45
  • обновите до FW 3.5 SP1,  должно поддерживаться
    8 октября 2009 г. 13:08
  • Проблема решается просто. Нужно всё-таки использовать шаблон проекта EntityFrameworkProject из архива Dynamic Data Preview 4. Дело в том, что при открытии его как отдельного проекта, всё работает, т.к  он использует обновленные версии dll из своей папки CommonFiles (в этом же шаблоне проекта лежит), а при попытке включить этот проект в существующее решение эти сборки почему-то меняются на аналогичные стандартные сборки из установленного Framework. Просто пришлось вручную их удалить и явно указать из эти dll из папки CommonFiles.
    • Помечено в качестве ответа I.Vorontsov 12 октября 2009 г. 6:18
    12 октября 2009 г. 6:05