首页 > 解决方案 > 代码优先更新数据库使用未指定的 localdb 连接字符串

问题描述

视觉工作室 2019,C#

我正在研究我的第一个代码优先实现。

我构建了一个效果很好的数据访问层。然后我去添加/测试数据迁移。

我创建了一个迁移文件,然后转到包管理器控制台并运行:

更新数据库

长时间的停顿后,我看到一条消息,上面写着:

Target database is: 'OMDB' (DataSource: (localdb)\mssqllocaldb, Provider: System.Data.SqlClient, Origin: Convention).

OMDB 是我的模型。但是,我并没有在我的 app.config 中将其指向 localDB,而是指向 sqlexpress:

….
<connectionStrings>
<add name="OMDB" connectionString="data source=.\SQLEXPRESS;initial catalog=MyDB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
  <parameters>
    <parameter value ="data source=.\SQLEXPRESS;initial catalog=MyDB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"/>
  </parameters>
  </defaultConnectionFactory>
  <providers>
  <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
   </providers>

…

为了构建数据访问层,我必须在类构造函数中添加一个覆盖以加载连接字符串:

    public OMDB(string szConnectionString) : base(szConnectionString)
    { }

但我认为这与我的问题无关......

我将默认项目设置为数据访问层项目 (DAL),我还尝试在 update-database 行上强制执行该项目:

update-database -Verbose -ProjectName DAL

我在我的解决方案中对 localDB 进行了全局搜索,但没有找到任何结果,所以我不知道它从哪里得到使用 localdb 作为源的想法......?

关于它在哪里为这个连接拉起 localDB 的任何建议?

标签: c#entity-frameworkentity-framework-corecode-first

解决方案


我设法通过以下步骤解决了这个问题。

  1. 在 Visual Studio 中将您的网站项目(其中web.config有)设置为默认/启动项目connectionStrings
  2. 确保 connectionString 指向实际的数据库实例
  3. 根据您的需要运行Enable-Migrations或在包管理器控制台中Enable-Migrations -Force

成功创建 InitialModel 后,您应该会收到如下消息:

使用数据库初始化程序创建的检测到的数据库。与现有数据库对应的脚手架迁移“202102050903200_InitialCreate”。要改用自动迁移,请删除 Migrations 文件夹并重新运行 Enable-Migrations 并指定 -EnableAutomaticMigrations 参数。


推荐阅读