代码优先更新数据库使用未指定的 localdb 连接字符串
Code first update-database uses localdb connection string which is not specified
Visual Studio 2019,C#
我正在处理我的第一个代码优先实现。
我构建了一个非常有用的数据访问层。然后我去 add/test 进行了数据迁移。
我创建了一个迁移文件,然后转到程序包管理器控制台并运行这个:
更新数据库
长时间停顿后,我看到一条消息:
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>
…
为了构建数据访问层,我不得不向 class 构造函数添加一个覆盖以加载连接字符串:
public OMDB(string szConnectionString) : base(szConnectionString)
{ }
但我认为这与我的问题无关...
我将默认项目设置为数据访问层项目 (DAL),我还尝试在更新数据库行上强制设置:
update-database -Verbose -ProjectName DAL
我在我的解决方案中对 localDB 进行了全局搜索,但没有找到结果,所以我不知道它是从哪里得到使用 localdb 作为源的想法...?
关于在何处为该连接提取 localDB 有什么建议吗?
好吧,这个真的让我燃烧了一些时间....我弄清楚了是什么原因造成的,至少现在也是一个解决方法。
我在解决方案中有一个项目是我的数据访问层。即使我在包管理器控制台中选择了该项目,它也会在顶层创建一个空白的应用程序配置。由于 app.config 中没有连接字符串标记,它默认为 localdb 并最终出错。
因此,为了解决这个问题,我将连接字符串从数据访问库项目 app.config 复制到主项目 app.config,一切都开始工作了。不知道它为什么要转到主项目文件,但它是......我稍后会回到这个,但它现在正在工作。
我按照以下步骤设法解决了这个问题。
- 将您的网站项目(其中
web.config
包含 connectionStrings
)设置为 Visual Studio 中的 Default/Startup 项目
- 确保 connectionString 指向实际的数据库实例
- 运行
Enable-Migrations
或 Enable-Migrations -Force
根据您的需要在程序包管理器控制台中
成功创建 InitialModel 后,您应该会收到如下消息:
Detected database created with a database initializer. Scaffolded
migration '202102050903200_InitialCreate' corresponding to existing
database. To use an automatic migration instead, delete the Migrations
folder and re-run Enable-Migrations specifying the
-EnableAutomaticMigrations parameter.
Visual Studio 2019,C#
我正在处理我的第一个代码优先实现。
我构建了一个非常有用的数据访问层。然后我去 add/test 进行了数据迁移。
我创建了一个迁移文件,然后转到程序包管理器控制台并运行这个:
更新数据库
长时间停顿后,我看到一条消息:
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>
…
为了构建数据访问层,我不得不向 class 构造函数添加一个覆盖以加载连接字符串:
public OMDB(string szConnectionString) : base(szConnectionString)
{ }
但我认为这与我的问题无关...
我将默认项目设置为数据访问层项目 (DAL),我还尝试在更新数据库行上强制设置:
update-database -Verbose -ProjectName DAL
我在我的解决方案中对 localDB 进行了全局搜索,但没有找到结果,所以我不知道它是从哪里得到使用 localdb 作为源的想法...?
关于在何处为该连接提取 localDB 有什么建议吗?
好吧,这个真的让我燃烧了一些时间....我弄清楚了是什么原因造成的,至少现在也是一个解决方法。
我在解决方案中有一个项目是我的数据访问层。即使我在包管理器控制台中选择了该项目,它也会在顶层创建一个空白的应用程序配置。由于 app.config 中没有连接字符串标记,它默认为 localdb 并最终出错。
因此,为了解决这个问题,我将连接字符串从数据访问库项目 app.config 复制到主项目 app.config,一切都开始工作了。不知道它为什么要转到主项目文件,但它是......我稍后会回到这个,但它现在正在工作。
我按照以下步骤设法解决了这个问题。
- 将您的网站项目(其中
web.config
包含connectionStrings
)设置为 Visual Studio 中的 Default/Startup 项目
- 确保 connectionString 指向实际的数据库实例
- 运行
Enable-Migrations
或Enable-Migrations -Force
根据您的需要在程序包管理器控制台中
成功创建 InitialModel 后,您应该会收到如下消息:
Detected database created with a database initializer. Scaffolded migration '202102050903200_InitialCreate' corresponding to existing database. To use an automatic migration instead, delete the Migrations folder and re-run Enable-Migrations specifying the -EnableAutomaticMigrations parameter.