EF Core Postgres Update-Database 正在尝试创建已存在的数据库
EF Core Postgres Update-Database is trying to Create Database which already exists
我在 .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
、运行ning 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!);
}
显然 Postgres 中的数据库名称区分大小写。我要求我的 DBA 创建数据库 Zeal
但得到 zeal
。当我将连接字符串更新为 zeal
时,迁移应用成功。
我在 .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
、运行ning 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!);
}
显然 Postgres 中的数据库名称区分大小写。我要求我的 DBA 创建数据库 Zeal
但得到 zeal
。当我将连接字符串更新为 zeal
时,迁移应用成功。