在mvc中启用自动迁移

时间:2015-09-29 07:46:42

标签: asp.net-mvc entity-framework database-migration ef-migrations

我正在创建一个MVC应用程序,我经常添加新类。由于类彼此相关并且已经创建的表中的测试数据没有意义,我更喜欢使用AutomaticMigrations。

我使用以下命令将数据库设置为初始状态。

Update-Database –TargetMigration: $InitialDatabase

但问题是它总是不起作用。它出错的可能原因是什么?我不熟悉Code First Migrations。

在运行时声明DbContext已更改时,通常会抛出错误。在启用迁移之前,我确保现有表中没有与已删除表的依赖关系。我也收到一个错误说明

Either the parameter @objname is ambiguous or the claimed @objtype (COLUMN) is wrong.

我正在寻找有关该主题的一般帮助。

3 个答案:

答案 0 :(得分:5)

首先,对于自动迁移,您应该在数据库上下文构造函数中设置Database Initializer。

public class YourDBContext: DbContext 
{        
    public YourDBContext(): base("ConnectionString") 
    {
         Database.SetInitializer<YourDBContext>(new CreateDatabaseIfNotExists<YourDBContext>());
    }

您还可以使用重写种子方法创建实现CreateDatabaseIfNotExists<YourDBContext>的自定义数据库初始化程序,以提供初始数据。

其次,您应该使用程序包管理器控制台Enable-Migrations -EnableAutomaticMigrations

中的命令启用自动迁移

然后,在程序包管理器控制台中使用Update-Database命令将向数据库应用您在上次迁移后所做的所有挂起的更改。

更新: 使用Verbose和update database命令查看生成的脚本

Update-Database –Verbose

答案 1 :(得分:1)

如果您需要一般帮助,我认为微软的documentation对初学者来说相当不错。他们还有一些很好的教程,可以让你从一开始就正确地开始。

对于您当前的问题,您能详细说明确切的问题吗?错误消息显示您需要自行修复的内容,而不一定是EF的问题。

<强>更新

使用以下行修改自定义DbContext的构造函数:

Database.SetInitializer<MyDbContext>(null);

答案 2 :(得分:1)

如果您始终要重新创建数据库而不是定位初始数据库迁移,则应使用DropCreateDatabaseIfModelChanges。有关asp.net website主题的更多信息 在上下文的构造函数中,例如

public class SchoolDBContext: DbContext 
    {        
        public SchoolDBContext(): base("SchoolDBConnectionString") 
        {
         Database.SetInitializer<SchoolDBContext>(new DropCreateDatabaseIfModelChanges<SchoolDBContext>());
        }
相关问题