EF Core Postgres更新数据库正在尝试创建已经存在的数据库

时间:2020-11-06 18:59:54

标签: c# postgresql entity-framework-core ef-core-3.0

我在.NET Core 3.1的EF Core上使用PostgreSQL。在本地计算机上,我能够成功完成Update-Database,从而创建了数据库并应用了迁移。

现在我们转到开发环境,我们的DBA已经创建了数据库,我只需要能够运行迁移来设置表。

但是,当我运行Update-Database时,出现错误消息:

CREATE DATABASE "Zeal";
Npgsql.PostgresException (0x80004005): 42501: permission denied to create database

如果最初已经存在数据库,我不知道为什么要尝试创建数据库。我创建的迁移没有说明有关实际创建数据库的任何内容。如何强制它不要尝试运行此脚本的CREATE DATABASE Zeal部分?之后的一切都应该正确。

我尝试删除所有迁移和ZealDbContextModelSnapshot,运行Add-Migration Initial,然后Update-Database尝试重置它,但是得到了相同的结果。

这是我的ContextFactory代码。我认为可以在此处设置一些选项,以在迁移期间禁用数据库创建步骤,但是我无法在线找到任何解决方案。

    public class ZealDbContextFactory : IDesignTimeDbContextFactory<ZealDbContext>
    {
        public IConfigurationRoot _config;
        public string _connString = "";

        public ZealDbContextFactory()
        {
            var env = "DEV";

            _config = new ConfigurationBuilder()
                .AddJsonFile("dbsettings.json")
                .Build();
            _connString = _config.GetConnectionString("ZealConnection_" + env);
        }

        public ZealDbContext CreateDbContext(string[] args)
        {
            var optionsBuilder = new DbContextOptionsBuilder<ZealDbContext>();
            optionsBuilder.UseNpgsql(_connString, x =>
            {
                //what options can I set here to disable database creation step during Update-Database?
            });
            return new ZealDbContext(optionsBuilder.Options, new MockConfiguration { EnvironmentName = "DEV" }, null!);
        }

1 个答案:

答案 0 :(得分:1)

显然,Postgres中的数据库名称区分大小写。我请求我的DBA创建数据库Zeal,但得到了zeal。当我将连接字符串更新为zeal时,迁移成功应用。