我似乎在使用enable-migrations和update-database的基本功能时遇到了问题。在将项目复制到另一台PC之前,我已经启用了项目。
使用VS 2010 Ultimate,SQL Server 2008 R2 Express,MVC 4和EF5。
在我的Configuration类中,我有:
public Configuration()
{
AutomaticMigrationsEnabled = true;
}
protected override void Seed(RecruitDB.ModelContext.RecruitModelContext context)
{
context.Statuses.AddOrUpdate(
s => s.ProgressStatus,
new Status { ProgressStatus = "Interview Arranged" },
new Status { ProgressStatus = "Candidate Rejected" },
new Status { ProgressStatus = "Candidate Accepted" },
new Status { ProgressStatus = "Job Offer Made" },
new Status { ProgressStatus = "Job Offer Accepted" },
new Status { ProgressStatus = "Job Offer Declined" }
);
// etc
在我的web.config中,我有EF设置指向数据库Recruitment。
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
</entityFramework>
<connectionStrings>
<add name="RecruitModelContext" providerName="System.Data.SqlClient" connectionString="Server=.\SQLEXPRESS;Initial Catalog=Recruitment;Integrated Security=True;MultipleActiveResultSets=true" />
</connectionStrings>
为什么我的数据库是通过RecruitDB.ModelContext.RecruitModelContext的名称创建的?
有没有办法阻止这种情况发生?
我尝试使用Enable-Migrations -Force重置,并在覆盖后重写我的配置文件。
有时我会得到正确名称的Recruitment数据库并开始正常使用该应用程序。随后,我无法运行Seed方法。
我最终不得不删除数据库并重新开始。
答案 0 :(得分:2)
我假设您使用的是EF Code First?
似乎EF默认为“按惯例的代码优先连接”,这解释了为什么DbContext的完全限定名称用作数据库名称。 (在此处阅读更多内容:http://msdn.microsoft.com/en-us/data/jj592674)
首先,尝试将连接字符串的名称设置为DbContext类的完全限定名称,即“RecruitDB.ModelContext.RecruitModelContext”。
如果失败,请尝试以下步骤:
Enable-Migrations
命令Add-Migration
命令Update-Database
命令以下是一个很好的EF迁移命令参考: http://coding.abel.nu/2012/03/ef-migrations-command-reference/#Enable-Migrations