我有两个项目。其中只有一个用于执行与数据库相关的任务。我们称之为 Project X 。现在, Project X 的config(app.config)文件具有如下连接字符串:
<connectionStrings>
<add name="ConX" connectionString="...;Initial Catalog=TestDb2;..." providerName="System.Data.SqlClient" />
</connectionStrings>
在 Project X 中,我有一个名为Campaign
的模型和一个从DbContext
派生的名为CampaignDbContext
的类,如下所示:
public class CampaignDbContext : DbContext
{
public string ConnectionString;
public CampaignDbContext() : base("name=ConY")
///You will see why i set it to ConY later on...
{ }
public DbSet<Campaign> Campaigns { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
Database.SetInitializer<CampaignDbContext>(null);
base.OnModelCreating(modelBuilder);
}
}
现在,让我们考虑第二个项目 Project Y 。第二个项目的连接字符串如下(当然是在配置文件中):
<connectionStrings>
<add name="ConY" connectionString="...;Initial Catalog=TestDb1;..." providerName="System.Data.SqlClient" />
</connectionStrings>
项目X 是项目Y 中的引用。 继续...
我打开 Package Manager控制台并针对 Project X 运行以下命令:
enable-migrations -ConfigurationTypeName ....
Add-migration -ConfigurationTypeName ....
Update-Database -ConfigurationTypeName ....
这些命令可以完成明显的工作,例如创建迁移,创建数据库和关联的表。
我的问题是:
这些命令从何处获取连接字符串?
在 Package Manager控制台中,我定位 Project X 。通过命令应用迁移时, Project X 如何从 Project Y 的配置文件中加载连接字符串?在 Project Y 的配置文件的连接字符串中,我将数据库名称设置为TestDB1
,并且命令也创建了该名称的数据库。
这是正常行为吗?如果是这样,它是如何工作的?
(不确定是否与这一切有关,但仍添加: Project Y 是解决方案的启动项目)