我正在尝试用实体框架核心()建立一个ASP .NET核心项目,其中有一个已经包含了一些表的MySQL数据库。我正在使用Pomelo.EntityFramework.MySql包连接到数据库。将连接字符串作为用户秘密传递不起作用。
我已经将用户秘密中的连接字符串设置为ConnectionStrings:Smokey = server=localhost;user=asp;password=password;database=data
,然后运行dotnet ef dbcontext scaffold Name=ConnectionStrings:Smokey "Pomelo.EntityFrameworkCore.MySql"
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseMySql("name=ConnectionStrings:Smokey", Microsoft.EntityFrameworkCore.ServerVersion.Parse("8.0.29-mysql"));
}
}
运行此操作将生成System.ArgumentException: Option 'name' not supported. at MySqlConnector.MySqlConnectionStringOption.GetOptionForKey(String key) in /_/src/MySqlConnector/MySqlConnectionStringBuilder.cs:line 940
如果我直接在源代码中使用连接字符串运行它,它就能工作。
如何将连接字符串/凭据与EF的代码库分开存储?
发布于 2022-07-25 07:26:07
我修正了它,你甚至根本不需要覆盖OnConfiguring
--这只是脚手架生成的东西。
您可以在配置期间传入连接字符串,如下所示
services.AddDbContext<DataContext>(
dbContextOptions => dbContextOptions
.UseMySql(connectionString, serverVersion)
您可以在这里使用IConfiguration对象访问用户机密。
var connectionString = new MySqlConnector.MySqlConnectionStringBuilder()
{
Server = "localhost",
UserID = configuration["MySQLUser"],
Password = configuration["MySQLPass"],
Database = "data"
}.ToString();
发布于 2022-07-23 12:24:16
这是一个Pomelo.EntityFrameworkCore.MySql中的bug,是固定在6.0.2。
(在撰写本文时,我还没有看到6.0.2是一个可用的NuGet上的版本,但我预计它很快就会上传。)
https://stackoverflow.com/questions/73065951
复制相似问题