实体框架核心错误:使用服务器“localhost”上的数据库“”连接发生错误
Posted
技术标签:
【中文标题】实体框架核心错误:使用服务器“localhost”上的数据库“”连接发生错误【英文标题】:Entity Framework Core Error: An error occurred using the connection to database '' on server 'localhost' 【发布时间】:2020-08-09 04:22:18 【问题描述】:我已经制作了一个ASP.NET Core 3.1
基于Web 的应用程序,并希望使用mysql 作为数据库。
我一直在关注一些关于使用 ASP.NET Core 3.1
创建 MySQL database
的 YouTube 教程[代码优先方法],其中包括来自本网站的教程:
https://docs.microsoft.com/en-us/aspnet/core/data/ef-rp/intro?view=aspnetcore-3.1&tabs=visual-studio
我创建了一个DataModel Class
,将UseMySQL
的服务添加到Startup.cs 类,并创建了一个实现DbContext Class
的AppDBContext Class
。
当我在 包管理器控制台 中运行此命令时:Add-Migration InitialDatabase
应用程序正在成功创建迁移。
当我运行 update-database
时,它抛出了这个异常:
fail: Microsoft.EntityFrameworkCore.Database.Connection[20004]
An error occurred using the connection to database '' on server 'localhost'.
An error occurred using the connection to database '' on server 'localhost'.
System.InvalidOperationException: An exception has been raised that is likely due to a transient failure. Consider enabling transient error resiliency by adding 'EnableRetryOnFailure()' to the 'UseMySQL' call.
当我按要求调用EnableRetryOnFailure();
函数时,我遇到了这个异常:
失败:Microsoft.EntityFrameworkCore.Database.Connection[20004] 使用连接到服务器“localhost”上的数据库“”时发生错误。使用与数据库 '' 的连接时发生错误 服务器“本地主机”。
可能是什么问题? 我哪里弄错了?
如果您有关于将MySQL Database
与ASP.NET Core
结合使用的有用文章的链接,我将不胜感激,或者您能在这个特定问题上提供帮助。
我正在使用 Visual Studio IDE 2019 和 ASP.NET Core 3.1.1
附加代码:
这是 Startup.cs 类:
private IConfiguration _configuration; public Startup(IConfiguration configuration) _configuration = configuration; // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) services.AddControllersWithViews(); // database connection string configuration services.AddDbContextPool<AppDBContext>(options => options.UseMySql(_configuration.GetConnectionString("DatabaseConnectionString"), mySqlOptionsAction: options => options.EnableRetryOnFailure(); )); services.AddMvc();
这是 appsettings.json 中的连接字符串:
"ConnectionStrings": "DatabaseConnectionString": "Server=localhost;Database=MyAppDB;user=root;Password=123;"
【问题讨论】:
该消息表明您的连接字符串为空。你的配置文件是什么样的? (应称为...EntityFramework.dll.config
或web.config
或App.config
)。
您使用的是MySql.Data.EntityFrameworkCore
还是Pomelo.EntityFrameworkCore.MySql
?
卢克和布拉德利提出了很好的问题。让我发布更多代码。我正在使用来自 Nuget 的 Pomelo.EntityFrameworkCore.MySql
@luker:我已经编辑了问题并添加了更多代码。我正在使用 appsettings.json 来存储数据库连接字符串
@Bradley:我正在使用 Pomelo.EntityFrameworkCore.MySql
【参考方案1】:
如果您在 NET6 中使用 SqlServer 时忘记指定连接字符串,也会发生这种情况:
错误:
var conString = builder.Configuration.GetConnectionString("MyDbConnection");
builder.Services.AddDbContext<MyDbContext>(options => options.UseSqlServer());
正确:
var conString = builder.Configuration.GetConnectionString("MyDbConnection");
builder.Services.AddDbContext<MyDbContext>(options => options.UseSqlServer(conString));
【讨论】:
是的,有点废话。【参考方案2】:我遇到了同样的问题。当 MariaDB 和 Web 应用程序在同一主机上运行时,会发生此错误。 您可以找到解决方案的提示here:
现在您的 MariaDB 服务器安装已设置为接受 来自远程主机的连接,我们必须添加一个允许的用户 从“localhost”以外的地方连接(MariaDB 中的用户是 定义为 'user'@'host',所以 'chadmaynard'@'localhost' 和 'chadmaynard'@'1.1.1.1'(或'chadmaynard'@'server.domain.local')是 不同的用户可以拥有完全不同的权限和/或密码。
在我的例子中,用户 mdbuser 可以根据表 mysql.user 从主机 192.168.178.% 进行连接。 所以我用 localhost 添加了第二个名为 mdbuser 的用户,错误消失了:
GRANT ALL PRIVILEGES ON *.* TO 'mdbuser'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
【讨论】:
【参考方案3】:就我而言,我只是单独添加了数据库端口。
改变了这个
MySQL": "server=mysqlserver.com:3306;user=db_user;password=db_pass;database=database_name"
到
MySQL": "server=mysqlserver.com;port=3306;user=db_user;password=db_pass;database=database_name"
【讨论】:
【参考方案4】:您的步骤似乎不包括安装 MySQL 服务器的本地实例,这可能是您找不到服务器的原因......因为它没有安装!
MSSQL (localdb) 与 Visual Studio 2019 (with the Data Modelling and Processing workload) 捆绑在一起,但 MySQL 仍需要手动安装。
您是否尝试过使用您的 EF Provider 安装受支持的 MySQL 服务器版本?
【讨论】:
【参考方案5】:我有同样的问题,当连接字符串错误时,我发生了这个错误。就我而言,它是端口(默认为 8457)。您是否尝试在连接字符串中指定它?
【讨论】:
【参考方案6】:我想我找到了问题的根源。当无法建立与数据库的连接时,也会发生此错误。确保连接字符串中的信息正确。此错误消息非常具有误导性,因此我花了几个小时才弄清楚这一点。
【讨论】:
我非常感谢您的发现。我一定会尝试您的建议,如果我遇到一些错误或异常,我会发布。你的解释有点道理。我很感激!【参考方案7】:你可以试试这个方法
安装包Pomelo.EntityFrameworkCore.MySQL
在 Startup.cs
中添加服务services.AddCors(); services.AddDbContext(options => options.UseMySql(Configuration.GetConnectionString("DatabaseConnectionString")));
在 appsettings.json
处更改连接字符串“连接字符串”: "DatabaseConnectionString": "server=localhost;port=3306;database=MyAppDB;user=root;password="
*根据你的 MySQL 服务器更改端口号
4.在Package Manager Console上运行这些命令进行数据迁移 添加-迁移 InitialCreate
更新数据库
您可以在github查看该项目,以获得更好的理解
【讨论】:
我会尝试你的方法,非常感谢你的时间和对这个问题的回应。 我已经尝试过您的方法,但仍然出现异常:失败:Microsoft.EntityFrameworkCore.Database.Connection[20004] 使用服务器“localhost”上的数据库“”连接发生错误。使用连接到服务器“localhost”上的数据库“”时发生错误。 System.InvalidOperationException:引发了一个异常,可能是由于暂时性故障。考虑通过将“EnableRetryOnFailure()”添加到“UseMySql”调用来启用瞬时错误恢复能力。 您的项目使用 Microsoft SQL Server 吗?你试过了吗? 是的,它可以与 Microsoft SQL Server 一起使用吗,我已经尝试过了。但是对于 MySQL,我面临这些异常,我不知道问题出在哪里。我已尝试遵循 Microsoft Docs 网站上的 YouTube 教程和示例,甚至根据您的建议尝试了 Github 的实现,但由于某些原因,Visual Studio IDE 抛出了这些异常。由于成本原因,我不喜欢 Microsoft SQL Server。最初我更喜欢 SQLite 而不是 MSSQL,但发现我可能会遇到 SQLite 的并发问题。现在我只剩下 MySQL 作为唯一的选择,这对我不起作用。【参考方案8】:您的连接字符串似乎不正确或 EF 无法提取它。在运行更新之前,您需要检查文档并选择正确的项目。 使用此帖子确认连接字符串:
https://www.c-sharpcorner.com/UploadFile/suthish_nair/how-to-generate-or-find-connection-string-from-visual-studio/
你可以尝试这个变通方法来指定与命令的连接,PS你需要更新MySql的提供者名称:
Update-Database -Verbose
-ConnectionString "CONNECTIONSTRING"
-ConnectionProviderName "System.Data.SqlClient"
-StartupProjectName WEBSITE_PROJECT -ProjectName MIGRATION_PROJECT
【讨论】:
让我试试你的推荐 遗憾的是,该建议并未解决问题。也许在某个地方我想念它。我仍然遇到异常。 您是否尝试过在连接字符串中使用集成安全性而不是用户名和密码?然后试试上面的变通命令?我会首先确保你的连接字符串是正确的! 我已经用一个链接更新了我的答案。尝试在该帖子之后确认您的连接字符串值。 好的。我会尝试这种方法以上是关于实体框架核心错误:使用服务器“localhost”上的数据库“”连接发生错误的主要内容,如果未能解决你的问题,请参考以下文章