我已经为我的域模型类添加了两个新属性,并相应地为数据表添加了两个属性。然后我尝试启动我的mvc Web应用程序并获得
The model backing the 'EFDbContext' context has changed since the database was created.
Consider using Code First Migrations to update the database
(http://go.microsoft.com/fwlink/?LinkId=238269).
阅读以下帖子:
MVC3 and Code First Migrations
EF 4.3 Automatic Migrations Walkthrough
我尝试Update-Database
通过程序包管理器控制台,但收到错误
Get-Package : Не удается найти параметр, соответствующий имени параметра "ProjectName".
C:\Work\MVC\packages\EntityFramework.5.0.0\tools\EntityFramework.psm1:611 знак:40
+ $package = Get-Package -ProjectName <<<< $project.FullName | ?{ $_.Id -eq 'EntityFramework' }
+ CategoryInfo : InvalidArgument: (:) [Get-Package], ParameterBindingException
+ FullyQualifiedErrorId : NamedParameterNotFound,NuGet.PowerShell.Commands.GetPackageCommand
The EntityFramework package is not installed on project 'Domain'.
但是 Entityframework 安装在项目 Domain 上。我从引用中删除了它,删除了 package.config 并成功重新安装了EF。但是Update-Database
仍会返回相同的错误。 Update-Database -Config
也可以
我做错了什么?
修改
非常感谢Ladislav Mrnka,我会试着改写我的问题。就我手动更改数据表而言,我不应该使用迁移。但是,我现在如何使用手动编辑的域模型类和数据表来使用EF?
答案 0 :(得分:22)
尝试将其添加到应用程序的启动中(您可以将其添加到App_Start
):
Database.SetInitializer<EFDbContext>(null);
它应该关闭与EF处理数据库相关的所有逻辑。您现在将全权负责使数据库与您的模型保持同步。
答案 1 :(得分:2)
我遇到了同样的问题,这就是我解决问题的方法。
我使用sql命令删除了表__MigrationHistory并再次运行update-database -verbose。
显然这个自动创建的表出了问题。
答案 2 :(得分:0)
答案2正是所需要的。虽然当我到达App_Start时,我意识到有4个配置文件,并且没有看到它适合任何一个。相反,我将它添加到我的EF数据库上下文
namespace JobTrack.Concrete
{
public class EFDbContext : DbContext
{
//Set the entity framework database context to the connection name
//in the Webconfig file for our SQL Server data source QSJTDB1
public EFDbContext() : base("name=EFDbConnection")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//Remove the tight dependency on the entity framework that
//wants to take control of the database. EF by nature wants
//to drive the database so that the database changes conform
//to the model changes in the application. This will remove the
//control from the EF and leave the changes to the database admin
//side so that it continues to be in sync with the model.
Database.SetInitializer<EFDbContext>(null);
//Remove the default pluaralization of model names
//This will allow us to work with database table names that are singular
base.OnModelCreating(modelBuilder);
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
//Allows for multiple entries of the class State to be used with
//interface objects such as IQueryTables for the State database table
public DbSet<State> State { get; set; }
}
}