最佳答案
我最近开始使用实体框架迁移,并注意到当我运行 Update-Database
命令时,数据库名称对我来说不起作用。
我的连接字符串是:
<connectionStrings>
<add name="DataContext" connectionString="Server=.\SQLEXPRESS;Initial Catalog=TestDB;Trusted_Connection=Yes;" providerName="System.Data.SqlClient" />
</connectionStrings>
我第一次运行 更新-资料库的时候,我的数据库是用正确的名字 TestDB创建的。然而,只要我对我的实体之一进行更改,它将不再为我更新,除非我添加一个启动项目名称(我正在使用一个多项目解决方案) :
Update-Database -StartUpProjectName "TestDB.Data"
这使得另一个新的数据库,迁移将始终继续使用。我不介意必须输入 StartUpProjectName命令,但是有没有办法覆盖这个生成的数据库的默认名称?它始终将数据库创建为
TestDB.Data.DataContext
是否有方法确保在传递 StartUpProject 名称时创建的数据库仅被称为 TestDB,或者这是使用 StartUpProjectName 设置的限制?
注意,我认为需要指定 StartUpProjectName 的原因是我有一个多层项目设置。迁移配置文件在我的“数据”项目中,实体/模型在我的“域”项目中,等等。我目前在 Global.asax.cs 文件中也没有任何初始化选项,因为我以前在代码 first 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();
}
}
谢谢,
瑞奇