У меня есть существующее приложение ASP.NET Web Forms, которое использует EF Code First с существующей базой данных, то есть я использую классы EF и DbContext, чтобы указать на существующую базу данных.
Я хочу дать проекту функциональность для создания/редактирования таблиц/полей и просто интересно, могут ли люди порекомендовать лучший способ сделать это. Я не могу использовать миграции, потому что проект используется на нескольких разных серверах/базах данных.
Я подумал о том, чтобы поместить что-то в файл Global.asax в Application_Start с помощью SqlCommand. Это хорошая идея или вы можете предложить лучший способ сделать это, желательно с EF?
Я не уверен, что, если какой-либо код будет полезен, поэтому, пожалуйста, дайте мне знать, если есть что-то, что вы хотели бы, чтобы я добавил к вопросу.
EDIT: На основании полученных ответов я также должен отметить, что я не могу напрямую обращаться к серверам, на которых установлено приложение, потому что они принадлежат клиентам. Проект развертывается локально, зашифровывается и загружается на сайт для их загрузки.
При использовании EF Code First вы должны использовать EF Code First Migrations, хотя вы говорите это невозможно.
Единственная причина не использовать это несколько серверов баз данных. Используете ли вы распределенные транзакции? В противном случае единственной переменной является ConnectionString на сервере базы данных, а EF Migrations выполнит всю работу по обновлению вашей схемы SQL.
Вероятно, это плохая идея сделать это как часть запуска приложения - для этого потребуется, чтобы пользователь, подключенный к вашей базе данных, подключался к вашей базе данных, имеет повышенные привилегии для создания/редактирования таблиц.
Вы можете использовать миграции для инициализации базы данных в рамках процесса развертывания с использованием migrate.exe
который является частью пакета EF NuGet.
Вероятно, также полезно прочитать немного больше о миграции - есть поддержка нескольких контекстов, которые могут быть перенесены отдельно...
В качестве альтернативы вы можете использовать сценарий SQL как часть процесса развертывания, но тогда вам нужно будет управлять SQL вручную...