无法访问主数据库的实体框架迁移

时间:2018-05-29 07:41:40

标签: c# entity-framework entity-framework-6

首先,我不是SQL专家......
我的假设是:不要让任何应用程序用户访问masterdb 至少这是我通常在我们的共享Azure SaaS SQL主机上运行的默认设置。

我准备了各种建议,告诉你这样做:

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();
    }

...和migrator.Update();将执行此操作... targetMigration为null。

    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 :(得分:0)

我的理解是,这是实体框架中的错误。在此处查看MS员工在GitHub上的错误报告

“ ......看来DbMigrator执行的数据库存在检查存在问题,它正在尝试连接到master数据库,但失败了。我们已更新了其他存在检查以不要求这样做,但似乎DbMigrator要么被遗漏,要么是由于某些原因无法在此处完成...”

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