Какие функции SQL Server 2017 сначала не поддерживаются в коде Entity Framework Core? - PullRequest
0 голосов
/ 06 сентября 2018

Наша команда думает об использовании кода Entity Framework Core в первую очередь для моделирования базы данных. У нас могут быть как проекты БД, так и модели EF, согласно статье здесь Проекты баз данных против миграций баз данных Entity Framework с использованием сравнений схем, просто пытаясь выяснить, что будет источником истины?

Поддерживает ли Entity Framework все функции в проектах базы данных SSDT SQL Server?

Какие функции не поддерживает EF Core 2? (например, не поддерживает ли что-либо из следующего: триггеры, представления, функции, хранимые процедуры, ключи шифрования, сертификаты, свойства БД (ANSI NULL, идентификатор в кавычках), разделы)

Я пытаюсь найти ресурс Microsoft.

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

tl; dr База данных Проекты многофункциональны, но в первую очередь база данных. Миграции выполняются сначала в коде, но имеют очень ограниченный встроенный набор функций базы данных.

Для многих людей неуместно сравнивать проекты баз данных и миграции. Они представляют два разных режима работы с Entity Framework. Миграции - это сначала код, DP - сначала база данных. Конечно, вы можете использовать миграции для управления схемой базы данных и, кроме того, поддерживать синхронизацию DP с созданной базой данных для удовлетворения требований администраторов баз данных (как следует из ссылки). Но оба ведут свою собственную отдельную жизнь, и единого Истинного Истины нет .

Так что сравнение их полезно, если вы еще не уверены, какой режим работы вы выберете.

Для меня наиболее важным отличием является то, что DP будет охватывать все объекты базы данных и обнаруживать все изменения между ними при сравнении баз данных. Миграции обнаруживают только изменения между базой данных и сопоставленной моделью. И набор опций для генерации объектов базы данных очень ограничен. Для всего, что вам нужно дополнительно, вы должны ввести SQL-предложения в код миграции. Эти заявления являются вашей собственной ответственностью. Вы должны выяснить сами, нужна ли миграция оператор ALTER PROCEDURE или нет (например). EF не будет жаловаться, если сценарий и база данных отличаются в этом отношении.

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

Еще одним преимуществом DP является то, что они великолепны в сочетании с контролем источников. Каждый объект базы данных имеет свой собственный файл, и очень легко проверить историю изменений каждого отдельного объекта. Это невозможно при сгенерированных миграциях. Действительно, многие промежуточные изменения могут никогда не привести к сгенерированной миграции.

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

0 голосов
/ 06 сентября 2018

EF Core - только ORM.

1) Вы должны быть готовы к созданию всех объектов БД, кроме таблиц, вручную. Что я создаю вручную: constrates (по умолчанию, а также условия). Так как это первый код - нет необходимости в SP, функциях и так далее. Если вы используете ORM - БД является только хранилищем. Конечно, практика важна. Для меня ограничения по умолчанию добавляют комфорт для таблиц, где я создаю тестовые данные вручную. И условия также полезны в ситуациях, когда вы не доверяете своему (командному) коду.

2) вы будете создавать (и отбрасывать) представления, триггеры, sp и т. Д. В коде «миграции» (в EF есть такая концепция) в простом sql:

 migrationBuilder.Sql("CREATE VIEW ...");

В результате у вас может появиться отдельная программа «миграции» (например, инструмент командной строки), которая устанавливает или удаляет как таблицы Ef Core, так и созданные вами объекты, выполняет и отменяет перенос данных.

«EF Core migrations» - довольно сложный API (резерв на неделю для обучения). Интересные темы: управление несколькими dbcontexts в одном db, создание объекта db во время миграции из аннотаций модели, unistall. Или найдите для этого фрилансера (эта часть проекта хороша для аутсорсинга).

...