【发布时间】:2012-03-08 19:16:34
【问题描述】:
我最近开始使用 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。因此,在我的项目中,我的数据项目中只有一个 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();
}
}
谢谢,
丰富
【问题讨论】:
-
感谢您编辑的答案..帮助了我很多..
-
另外,我发现这篇文章很有帮助。 msdn.microsoft.com/en-us/data/jj592674.aspx
标签: entity-framework entity-framework-migrations