代码优先更新数据库使用未指定的本地数据库连接字符串



Visual Studio 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 -Verbose -ProjectName DAL

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

关于它在哪里拉起本地数据库进行此连接的任何建议?

我设法按照以下步骤解决了这个问题。

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

成功创建初始模型后,您应该会收到如下消息:

检测到使用数据库初始值设定项创建的数据库。脚手架 与现有迁移"202102050903200_InitialCreate"相对应 数据库。要改用自动迁移,请删除迁移 文件夹并重新运行启用迁移,指定 -启用自动迁移参数。

好吧,这个真的让我烧了一段时间...... 我弄清楚了导致它的原因,以及至少目前的一种解决方法。

我在解决方案中有一个项目,它是我的数据访问层。 即使我在包管理器控制台中选择了该项目,它也在顶层创建了一个空白的应用程序配置。 由于该 app.config 中没有连接字符串标记,因此它默认为 localdb 并最终出错。

因此,为了解决这个问题,我将连接字符串从数据访问库项目 app.config 复制到主项目 app.config,一切开始工作。 不知道为什么它想转到主项目文件,但它是...... 我稍后必须回到这个问题,但它现在正在工作。

最新更新