Sql Server Data Tools & Entity Framework - есть ли здесь синергия?

11

Выходя из проекта, использующего Linq2Sql, я подозреваю, что следующий (больший) проект может подтолкнуть меня в объятия Entity Framework. Я немного ознакомился с этой темой, но мне не удалось найти связную историю о том, как SQL Server Data Tools и Entity Framework следует / можно / можно использовать вместе.

  • Были ли они задуманы совершенно по-отдельности, и использование их вместе - это неправильный путь?
  • Они как-то совершенно ортогональны, и я упускаю суть?

Несколько причин, почему я думаю, что я мог бы хотеть обоих:

  • SSDT отлично подходит для «скомпилированных» (проверенных) и легко обновляемых SQL и схем
  • Но история SSDT «миграция / обновление» не убедительна (для меня): «Обновление чего-либо» работает нормально для схемы, но нет никакого способа (AFAIK), что она может когда-либо работать для данных.
  • С другой стороны, я не пробовал EF-миграцию, чтобы узнать, не вызывает ли она аналогичных проблем, но биты вверх / вниз выглядят довольно удобно.
Benjol
источник
Кажется, это то, что команда EF рассматривает. github.com/aspnet/EntityFramework/issues/4321
Snæbjørn

Ответы:

9

Позвольте мне высказать другую точку зрения. Ведение базы данных Entity Framework совершенно бесполезно в любом корпоративном или крупном проекте базы данных.

Проблемы:

  • Автоматическое обновление схемы. Это абсолютно не то, что я хочу, так как это полностью нарушает основы обслуживания базы данных. Проблемы: (a) кто-то, работающий с более новой версией, обновляет базу данных вместо того, чтобы получить проблему, и (b) обновления запланированы с dba, обычно делающим резервную копию FIRST. Итак, автоматические обновления бесполезны.

  • Создание базы данных работает только в случае вырожденных ребер. Даже не пытайтесь использовать расширенные функции базы данных - независимо от того, какая из них. Пример сервера SQL: включенные поля в индексах, фильтры по индексам, разбиение, сжатие, правила проверки полей.

  • Миграция - снова предполагает вырожденные граничные случаи: нет преобразования данных или многошагового обновления. Пример: Таблица X имеет историческое поле «пользователь», в котором записывается, что пользователь что-то делает. В новой настройке есть таблица «Пользователь», поэтому необходимо создать пользовательскую таблицу, затем создать пользователей, затем создать справочное поле пользователя в таблице x, затем обновить его, указав, что оно из пользовательской таблицы, а затем удалить пользовательское поле.

Единственный разумный способ справиться с этими сценариями - это сценарии генерации и миграции и правильное управление версиями.

Теперь SSDT - это отличный инструмент для управления версиями конкретной версии базы данных намного лучше, чем Entity Framework, потому что он на самом деле - работает. Как в: он записывает все функции. Ни на одной из баз данных, которые у меня есть, я в первую очередь мог бы использовать код - потому что мы всегда фильтровали индексы хотя бы;) EF даже не дал бы мне 10% того, что мне нужно.

Наш подход:

  • Разработайте базу данных в базе данных, затем синхронизируйте ее с модулем SSDT, который будет зарегистрирован. Синхронизация схемы позволяет разработчикам быстро обновлять свою версию. Всегда есть авторитетная основная база данных с текущей версией где-нибудь (на специальном сервере), поэтому у нас есть справочная версия для работы.

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

TomTom
источник
3

Существует несколько способов использования EF с базой данных SQL Server.

  1. Code-First ... Вы пишете классы, а EF генерирует связанные таблицы
  2. Сначала база данных ... Вы разрабатываете таблицы, а EF генерирует классы.

EF не обязательно сделает всю работу за вас. EF даст вам от 80 до 95 процентов. Остальные 5–20 процентов ваших усилий по разработке базы данных будут дополнены оптимизациями, такими как представления и хранимые процедуры.

Так что нет, они не ортогональны. Но вам придется решить, какой будет ваша общая стратегия проектирования, а затем положиться на такие инструменты, как SSDT, чтобы помочь вам оптимизировать те части, где EF дает менее чем идеальные результаты.

Роберт Харви
источник
Странно, этот ответ не появился в моем почтовом ящике ...
Бенджол