我最近开始使用Entity Framework迁移,并注意到在运行Update-Database
命令时,数据库名称并没有为我提供。
我的连接字符串是:
<connectionStrings>
<add name="DataContext" connectionString="Server=.\SQLEXPRESS;Initial Catalog=TestDB;Trusted_Connection=Yes;" providerName="System.Data.SqlClient" />
</connectionStrings>
我第一次运行Update-Database时,我的数据库是用正确的名称TestDB创建的。但是,一旦我对我的某个实体进行了更改,除非我添加一个启动项目名称(我正在使用多项目解决方案),否则它将不再为我更新:
Update-Database -StartUpProjectName "TestDB.Data"
然后,这将创建另一个新的数据库,迁移将始终继续使用。我不介意放入StartUpProjectName命令,但有没有办法覆盖它产生的数据库的默认名称?它始终将数据库创建为
TestDB.Data.DataContext
有没有办法确保传递StartUpProject名称时创建的数据库只是名为TestDB,或者这是使用StartUpProjectName设置的限制?
作为一个注释,我认为我需要指定StartUpProjectName的原因是我有一个多层项目设置。迁移配置文件位于我的“数据”项目中,实体/模型位于我的“域”项目中,等等。我目前在Global.asax.cs文件中也没有任何初始化选项,就像我之前使用过的那样。代码首先是ef 4.2。所以在我的项目中,我只在Data项目中有一个DataContext,在该项目中也有一个迁移配置。
编辑:
自从我最初设置这个问题以来,我偶然发现了在多项目解决方案中命名数据库的“正确”方法。虽然下面的答案将起作用,但它确实意味着您在另一个区域中复制了您的web.config,这不是一个理想的解决方案。相反,您可以通过执行类似的操作将名称放入DbContext(DataContext只是我在项目中使用的名称):
public class DataContext : DbContext
{
public DataContext() : base("DatabaseNameHere")
{ }
public DbSet<Table1> Table1 { get; set; }
public DbSet<Table2> Table2 { get; set; }
public virtual void Commit()
{
base.SaveChanges();
}
}
谢谢,
丰富
在执行update-database
您应指定包含迁移的项目。确保该项目中包含正确连接字符串的app.config
文件。
在多个项目中拆分应用程序时,运行应用程序时使用的连接字符串是项目启动之一。迁移时,使用的连接字符串是包含迁移的项目之一。
当我进行类似的设置时,我必须在两个地方添加连接字符串。有点尴尬,但它的工作原理。
您可以通过将其作为参数提供来避免在app.config中对其进行管理:
Update-Database -Verbose
-ConnectionString "CONNECTIONSTRING"
-ConnectionProviderName "System.Data.SqlClient"
-StartupProjectName WEBSITE_PROJECT -ProjectName MIGRATION_PROJECT
如果你喜欢无休止地打字,那就很容易。