WPF C#中update-database默认使用LocalDb而非指定SQL Server问题
问题原因与解决方案
核心原因
Entity Framework的update-database迁移命令默认读取启动项目的配置文件。你的启动项目是App.UI(WPF应用),而它的配置文件中没有指定目标连接字符串,EF就会 fallback 到LocalDB的默认连接(LocalDb\mssqllocaldb),这就是为什么数据库建在了LocalDB里。
类库项目(App.Data)的App.config不会被迁移命令自动读取——因为迁移命令的上下文是启动项目,而非类库。
解决方案
方案1:在启动项目(App.UI)中添加连接字符串
这是最稳妥的长期方案,因为运行时应用也需要读取启动项目的配置:
在App.UI的App.config中添加和App.Data一致的连接字符串(注意统一名称大小写):
<connectionStrings> <add name="AppDb" connectionString="Server=MyServer;Database=AppDb;Trusted_Connection=True;" providerName="System.Data.SqlClient" /> </connectionStrings>
添加后重新执行update-database,命令就会读取启动项目的配置,连接到你指定的AppDb数据库。
方案2:执行迁移时指定项目和连接字符串
如果不想修改启动项目的配置,可以在执行update-database时通过参数强制指定读取类库的配置:
Update-Database -ConnectionStringName "AppDb" -Project "App.Data"
这个命令会直接读取App.Data项目的App.config中的连接字符串,但每次迁移都需要添加这些参数,适合临时场景。
额外说明
- 类库的
App.config仅在单独测试类库时有用,当类库被启动项目引用后,运行时和迁移命令都以启动项目的配置为准。 - 不需要在两个项目中都配置连接字符串,但启动项目必须有(方案1),或者每次迁移都指定参数(方案2)。
内容的提问来源于stack exchange,提问作者SND69
相关产品推荐
相关产品推荐

