【问题标题】:EF Core 6 with Pomelo EntityFrameworkCore MySql fails to create database带有 Pomelo EntityFrameworkCore MySql 的 EF Core 6 无法创建数据库
【发布时间】:2022-07-26 04:21:41
【问题描述】:

我将 EF Core 6 与 Pomelo.EntityFrameworkCore.MySql 和代码一起使用。我的连接字符串中有以下代码。

public sealed partial class MyDbContext : DbContext
{
    public MyDbContext(DbContextOptions<MyDbContext> options)
        : base(options)
    {
        Database.Migrate();

        ChangeTracker.LazyLoadingEnabled = false;
    }

当我运行我的应用程序并初始化 MyDbContext 时,我第一次得到 Unknown database 'mydatabase' 数据库不存在,但到目前为止用于创建它的迁移

用户拥有对 mysql 的管理员访问权限,因此这不是用户权限问题。

这是堆栈跟踪

   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
   at System.Threading.Tasks.ValueTask`1.get_Result()
   at System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable`1.ConfiguredValueTaskAwaiter.GetResult()
   at MySqlConnector.Core.ResultSet.<ReadResultSetHeaderAsync>d__2.MoveNext() in /_/src/MySqlConnector/Core/ResultSet.cs:line 44
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at MySqlConnector.MySqlDataReader.ActivateResultSet(CancellationToken cancellationToken) in /_/src/MySqlConnector/MySqlDataReader.cs:line 130
   at MySqlConnector.MySqlDataReader.<CreateAsync>d__106.MoveNext() in /_/src/MySqlConnector/MySqlDataReader.cs:line 457
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
   at MySqlConnector.Core.CommandExecutor.<ExecuteReaderAsync>d__0.MoveNext() in /_/src/MySqlConnector/Core/CommandExecutor.cs:line 56
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
   at MySqlConnector.MySqlCommand.<ExecuteNonQueryAsync>d__78.MoveNext() in /_/src/MySqlConnector/MySqlCommand.cs:line 282
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at MySqlConnector.MySqlCommand.ExecuteNonQuery() in /_/src/MySqlConnector/MySqlCommand.cs:line 101
   at Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlDatabaseCreator.<>c__DisplayClass18_0.<Exists>b__0(DateTime giveUp)

我的连接字符串是"DbConnection": "server=127.0.0.1;port=3306;database=mydatabase;uid=muusername;pwd=mypassword;"

这里有什么问题?

【问题讨论】:

标签: c# asp.net .net entity-framework-core pomelo-entityframeworkcore-mysql


【解决方案1】:

这不是向您的代码抛出的异常,而只是被 Pomelo 捕获的内部异常。

Pomelo 正在通过尝试打开它来测试数据库是否存在。如果不存在,则 MySQL 会抛出异常并被 Pomelo 捕获,然后 Pomelo 将创建数据库。

因此,您的 IDE 设置很可能会中断所有(包括内部)异常。尝试继续运行应用程序,它应该可以正常工作并创建数据库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-03
    • 2022-01-12
    • 2017-09-26
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    • 2018-11-22
    • 2018-09-05
    相关资源
    最近更新 更多