我首先使用EntityFramework 6代码进行迁移。我有两个项目-UI和BusinessLogic。 UI是一个依赖于BusinessLogic的.NET MVC Web应用程序,BusinessLogic是一个类库。 WebUI的config部分包括连接字符串。 BusinessLogic还具有以下config部分(不提供连接字符串),并包含实际的代码优先的Migration类:
<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项目中的连接字符串。

为了理解这种情况的发生原因,我将调试器附加到DbContext类的构造函数中,如下所示:

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配置文件? ?

谁能解释没有在BusinessLogic的app.config中提供连接字符串(存在迁移的地方)的情况,为什么/为什么? 我期望我必须在BusinessLogic类库的app.config中设置一个连接字符串-但如果这是预期的行为,我很乐意不这样做。期待听到解释!

最佳答案

通过我自己的一些测试,我发现update-database调用期间使用的配置是当前设置的启动项目。

就我而言,我设置了一个控制台应用程序来执行一些批处理工作,并且在通过种子进行调试时,我注意到了与您提到的行为相同的行为。交换启动项目是更改事件配置的原因。

关于visual-studio - Entity Framework 6在哪里获取迁移的连接字符串?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48533676/

10-15 06:16