4

我已经向我的域模型类添加了两个新属性,并相应地向数据表添加了两个属性。然后我尝试启动我的 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 和代码优先迁移

EF 4.3 自动迁移演练

我试图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 与手动编辑的域模型类和数据表一起工作?

4

3 回答 3

23

尝试将此添加到您的应用程序的启动中(您可以将其放入App_Start):

Database.SetInitializer<EFDbContext>(null);

它应该关闭与从 EF 处理数据库相关的所有逻辑。您现在将完全负责使您的数据库与您的模型保持同步。

于 2012-08-22T07:45:56.947 回答
2

我遇到了同样的问题,这就是我解决问题的方法。

我使用 sql 命令删除了表 __MigrationHistory 并再次运行 update-database -verbose。

显然这个自动创建的表有问题。

于 2013-07-19T06:00:26.073 回答
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; } 

}

}

于 2014-01-29T02:56:42.053 回答