Entity Framework 6 从哪里获取迁移的连接字符串?
Where Does Entity Framework 6 Get Connection String For Migrations?
我正在使用 EntityFramework 6 代码优先进行迁移。我有两个项目——UI 和 BusinessLogic。 UI 是一个依赖于 BusinessLogic 的 .NET MVC Web 应用程序,它是一个 class 库。 WebUI 具有包含连接字符串的配置部分。 BusinessLogic 还具有以下配置部分(未提供连接字符串)并首先包含实际代码迁移 classes:
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
在包管理器控制台中,当我 运行 update-database -ProjectName BusinessLogic
它以某种方式知道使用我的 UI 项目中的连接字符串。
为了理解 how/why 这件事的发生,我将调试器附加到我的 DbContext class 的构造函数,如下所示:
public MyDbContext() : base(CloudConfigurationManager.GetSetting(CONNECTION_STRING_KEY, false))
{
//--launch the debugger
System.Diagnostics.Debugger.Launch();
现在启动了调试器并在 DbContext 构造函数中设置了一个断点,我可以计算 AppDomain.CurrentDomain.BaseDirectory
结果:
C:\someRepoLocation\Source\BusinessLogic\bin\Debug\
这似乎表明当前应用程序域是 BusinessLogic。
然而,评估 AppDomain.CurrentDomain.SetupInformation.ConfigurationFile
产量:
C:\someRepoLocation\Source\UI\tmpD442.tmp
所以当前的应用程序域是 BusinessLogic,但它正在使用根 UI 文件夹中的一些 .tmp 配置文件?哇?
任何人都可以解释 how/why 在 BusinessLogic(迁移存在的地方)的 app.config 中没有提供连接字符串的情况下,这是有效的吗? 我期待我必须在 BusinessLogic class 库的 app.config 中设置一个连接字符串——但如果这是预期的行为,我很乐意不这样做。期待听到什么解释!
通过我自己的一些测试,我发现 update-database
调用期间使用的配置是当前设置的 start-up 项目。
就我而言,我设置了一个控制台应用程序来执行一些批处理工作,并且在通过种子进行调试时,我注意到了与您指出的相同的行为。交换启动项目是更改活动配置的原因。
我正在使用 EntityFramework 6 代码优先进行迁移。我有两个项目——UI 和 BusinessLogic。 UI 是一个依赖于 BusinessLogic 的 .NET MVC Web 应用程序,它是一个 class 库。 WebUI 具有包含连接字符串的配置部分。 BusinessLogic 还具有以下配置部分(未提供连接字符串)并首先包含实际代码迁移 classes:
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
在包管理器控制台中,当我 运行 update-database -ProjectName BusinessLogic
它以某种方式知道使用我的 UI 项目中的连接字符串。
为了理解 how/why 这件事的发生,我将调试器附加到我的 DbContext class 的构造函数,如下所示:
public MyDbContext() : base(CloudConfigurationManager.GetSetting(CONNECTION_STRING_KEY, false))
{
//--launch the debugger
System.Diagnostics.Debugger.Launch();
现在启动了调试器并在 DbContext 构造函数中设置了一个断点,我可以计算 AppDomain.CurrentDomain.BaseDirectory
结果:
C:\someRepoLocation\Source\BusinessLogic\bin\Debug\
这似乎表明当前应用程序域是 BusinessLogic。
然而,评估 AppDomain.CurrentDomain.SetupInformation.ConfigurationFile
产量:
C:\someRepoLocation\Source\UI\tmpD442.tmp
所以当前的应用程序域是 BusinessLogic,但它正在使用根 UI 文件夹中的一些 .tmp 配置文件?哇?
任何人都可以解释 how/why 在 BusinessLogic(迁移存在的地方)的 app.config 中没有提供连接字符串的情况下,这是有效的吗? 我期待我必须在 BusinessLogic class 库的 app.config 中设置一个连接字符串——但如果这是预期的行为,我很乐意不这样做。期待听到什么解释!
通过我自己的一些测试,我发现 update-database
调用期间使用的配置是当前设置的 start-up 项目。
就我而言,我设置了一个控制台应用程序来执行一些批处理工作,并且在通过种子进行调试时,我注意到了与您指出的相同的行为。交换启动项目是更改活动配置的原因。