WPF Core - App.config 中的连接字符串不起作用
Posted
技术标签:
【中文标题】WPF Core - App.config 中的连接字符串不起作用【英文标题】:WPF Core - Connection Strings inside App.config Not Working 【发布时间】:2020-07-09 04:02:01 【问题描述】:在遇到上述问题时,甚至在Connection Strings - EF Core 进行了简单的演练,但发现虽然硬编码连接字符串为:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;");
导致成功,使用插入 App.config 文件的推荐方法,例如:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="BloggingDatabase"
connectionString="Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
并将主代码更新为:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
optionsBuilder.UseSqlServer(ConfigurationManager.ConnectionStrings["BloggingDatabase"].ConnectionString);
不成功,并且在执行迁移时遇到以下错误:
System.NullReferenceException: Object reference not set to an instance of an object.
at Intro.BloggingContext.OnConfiguring(DbContextOptionsBuilder optionsBuilder) in C:\<...FileLocation...>\AppDbContext.cs:line 14
at Microsoft.EntityFrameworkCore.DbContext.get_InternalServiceProvider()
at Microsoft.EntityFrameworkCore.DbContext.Microsoft.EntityFrameworkCore.Infrastructure.IInfrastructure<System.IServiceProvider>.get_Instance()
at Microsoft.EntityFrameworkCore.Infrastructure.Internal.InfrastructureExtensions.GetService[TService](IInfrastructure`1 accessor)
at Microsoft.EntityFrameworkCore.Infrastructure.AccessorExtensions.GetService[TService](IInfrastructure`1 accessor)
at Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(Func`1 factory)
at Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(String contextType)
at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.AddMigration(String name, String outputDir, String contextType)
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigrationImpl(String name, String outputDir, String contextType)
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigration.<>c__DisplayClass0_0.<.ctor>b__0()
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.<>c__DisplayClass3_0`1.<Execute>b__0()
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
Object reference not set to an instance of an object.
同样的原因可能是什么?
提前感谢您的审阅和回复。
【问题讨论】:
你检查过这个属性ConfigurationManager.ConnectionStrings["BloggingDatabase"].ConnectionString
吗?
这能回答你的问题吗? Is ConfigurationManager.AppSettings available in .NET Core 2.0?
如果你指的是命名空间的使用 System.Configuration 我也做了同样的事情,加上上述属性被完全引用如下并不能解决上述问题: optionsBuilder.UseSqlServer(System.Configuration.ConfigurationManager.ConnectionStrings["BloggingDatabase"].ConnectionString);
奇怪!!! 在使用索引技术时,例如:optionsBuilder.UseSqlServer(System.Configuration.ConfigurationManager.ConnectionStrings[0].ConnectionString); b> 成功了!
【参考方案1】:
终于找到镜像问题here唯一满意的答案了。
App.Config 不是 WPF Core 的连接字符串的正确选择。在这方面,它是一个足够成功的 appsettings.json 文件。
【讨论】:
【参考方案2】:奇怪!!!在使用索引技术时,例如:optionsBuilder.UseSqlServer(System.Configuration.ConfigurationManager.ConnectionStrings[0].ConnectionString);成功了! – Faraz Ahmed Qureshi 3 月 28 日 17:06
确实有效
【讨论】:
以上是关于WPF Core - App.config 中的连接字符串不起作用的主要内容,如果未能解决你的问题,请参考以下文章
NLog 无法读取 .NET Core 2.2 控制台应用程序中的 app.config configSection
为啥将 **appSettings** 部分添加到 App.config 会导致 WPF 应用程序出错?