MVC3 и EF Data в первую очередь: каковы лучшие практики?

Похоже, что основное внимание в MVC3 и EF4.1 сосредоточено вокруг "кода в первую очередь" - я не могу найти какие-либо примеры или учебники, которые соответствуют следующим критериям:

  • использует существующую базу данных SQLServer
  • имеет отдельные проекты для доступа к сети и данным (у нас будет несколько веб-приложений, использующих одни и те же классы доступа к данным)
  • рекомендации по валидации

Существует ли такой пример или учебник? Существуют ли какие-либо задокументированные "лучшие практики" о том, как этого добиться, или обоснование НЕ структурирования решения таким образом?

1 ответ

Это довольно распространенный сценарий, и он зависит от того, хотите ли вы использовать файл EDMX для отображения или хотите, чтобы отображение было определено в коде (например, сначала код).

Оба сценария могут быть сделаны в качестве базы данных в первую очередь

  • Вы создадите EDMX из существующей базы данных со встроенными инструментами EF в Visual Studio и будете использовать шаблон генератора DbContext T4 для получения классов POCO и производного класса DbContext
  • Вы загрузите EF Power Tools CTP и будете использовать его функцию обратного инжиниринга для генерации отображения кода, классов POCO и контекста.

Ни один из этих подходов не добавит аннотации данных. Аннотации данных об объектах не должны использоваться для проверки клиента (что является плохой практикой), если вы не работаете с очень простыми приложениями. Обычно ваши взгляды имеют более продвинутые ожидания, и их проверка может отличаться от сущности. Например, представление вставки и представление обновления могут нуждаться в разных проверках, и их невозможно выполнить с одним набором аннотаций данных на объекте. По этой причине вы должны перемещать аннотации данных для проверки в специализированные модели представлений и преобразовывать ваши сущности для просмотра моделей и наоборот (вы можете использовать AutoMapper, чтобы упростить это).

В любом случае, можно добавлять аннотации данных в сгенерированные классы с помощью классов собеседников, но, как уже упоминалось, это не очень хорошая практика.