Миграция Entity Framework без доступа к главной базе данных - PullRequest
0 голосов
/ 29 мая 2018

Прежде всего, я не эксперт по SQL ....
Мое предположение: Не позволяйте любому пользователю приложения получать доступ к masterdb.
Впо крайней мере, это настройка по умолчанию, которую я обычно запускаю на нашем общем хосте SQL Azure SaaS.

Я готов предложить несколько советов, которые говорят вам сделать это:

Database.SetInitializer<AppDataContext>(null);

Однако, насколько я понимаю, полностью отключает автоматические миграции .
Я хочу автоматические миграции (схемы) - я не хочу, чтобы EF создавал новую базу данных (или проверял существование базы данных по masterdb).

Чтоправильное решение для этого?

  • Предоставить доступ к masterdb?(если да, может ли кто-нибудь предоставить фрагмент с наименьшими привилегиями)
  • Не использовать миграции EF (v6)?: - (

Обновление 1: Я не декомпилировал источники, а вместо этого посмотрел на моно реализацию MigrateDatabaseToLatestVersion.

    /// <inheritdoc />
    public void InitializeDatabase(TContext context)
    {
        Check.NotNull(context, "context");

        var migrator = new DbMigrator(_config);
        migrator.Update();
    }

...and migrator.Update (); сделает это ... с нулевым значением targetMigration.

    public override void Update(string targetMigration)
    {
        base.EnsureDatabaseExists(() => UpdateInternal(targetMigration));
    }

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

Обновление 2:

Я вижу следующий вызов:

IF db_id(N'my-database') IS NOT NULL SELECT 1 ELSE SELECT Count(*) FROM sys.databases WHERE [name]=N'my-database'

Но это нормально - нет мастераДля этого требуется доступ к базе данных.

1 Ответ

0 голосов
/ 16 декабря 2018

Насколько я понимаю, это ошибка в Entity Framework.Смотрите отчет об ошибке от MS на их GitHub

"... кажется, что есть проблема с проверкой существования базы данных, которая выполняется DbMigrator - он пытается подключиться к основной базе данных,что не удалось. Мы обновили другие проверки существования, чтобы не требовать этого, но похоже, что DbMigrator либо пропущен, либо по какой-то причине это не удалось сделать здесь ... "

https://github.com/aspnet/EntityFramework6/issues/522

...