我在试着管理 dotnet ef database update
针对我的aws aurora mysql rds集群的cli命令。出于测试目的,我硬编码了连接字符串,以消除配置加载的问题。
当我运行 update
命令我收到以下错误:
使用到服务器“some rds cluster.defg.us-east-2.rds.amazonaws.com”上数据库“”的连接时出错。
mysql.data.mysqlclient.mysqlexception(0x80004005):拒绝用户'bobby'@'555.555.555.555'的访问(使用密码:yes)
在c:\projects\mysqlconnector\src\mysqlconnector\core\serversession.cs中的mysqlconnector.core.serversession.connectasync(connectionsettings cs,iloadpalander loadbalancer,iobehavior,cancellationtoken cancellationtoken):第333行
我的 ConfigureServices
方法如下所示:
public void ConfigureServices(IServiceCollection services)
{
services.AddOptions();
services.AddDbContextPool<AccountContext>(options =>
{
options.UseMySql("server=a-random-cluster.foobar.us-east-2.rds.amazonaws.com;database=SomeDbHere;user=abcdefg;password=abcdefg", contextOptionsBuilder =>
{
contextOptionsBuilder.ServerVersion(new Version(5, 7, 12), ServerType.MySql);
});
});
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
我能够在本地机器上使用mysql工作台连接到集群;这个 update
来自同一台计算机的cli命令失败。连接到rds的安全组允许来自我的ip地址的流量连接(因此mysql workbench连接)。ef core和pomelo.entityframeworkcore.mysql需要做什么才能让cli更新表?aurora是否支持ef core为了更新数据模型而需要做的事情,比如出于某种原因使用不同的端口号?
我注意到错误是“using the connection to database''`并且我无法判断它是否故意将数据库名称留空,或者这是否是问题的一部分。db是在migration和connection字符串中指定的,所以我假设他们不使用db名称,因为在mysql中它不是db而是“schema”。
我正在运行aspnetcore 2.1.0和ef core 2.1.0
我从下面的实体和上下文生成了迁移。
public partial class InitialMigration : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.EnsureSchema(
name: "SomeDbHere");
migrationBuilder.CreateTable(
name: "Users",
schema: "SomeDbHere",
columns: table => new
{
Id = table.Column<int>(nullable: false)
.Annotation(
"MySql:ValueGenerationStrategy",
MySqlValueGenerationStrategy.IdentityColumn),
Username = table.Column<string>(nullable: true),
CognitoId = table.Column<string>(nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_Users", x => x.Id);
});
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "Users",
schema: "SomeDbHere");
}
}
2条答案
按热度按时间mrphzbgm1#
我也遇到了同样的问题,这是因为db密码中包含一个“$”字符。
当我这么做的时候
export MY_DB_ENV="Server=localhost;Database=my_db;Uid=root;Pwd=pass_with_$"
$已从密码中删除,无法连接。你可以和我核对一下
echo $MY_DB_ENV
如果是这样的话。uz75evzq2#
这似乎是一个连接问题。我能够在一个新项目中连接并运行迁移。看看这个项目https://github.com/pomelofoundation/pomelo.entityframeworkcore.mysql 并阅读test/efcore.mysql.integrationtests中的代码。