在 mvc 中启用自动迁移

Enable Automatic Migrations in mvc

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

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

Update-Database –TargetMigration: $InitialDatabase

但问题是它并不总是有效。它出错的可能原因是什么?我不熟悉代码优先迁移。

该错误主要是在运行时抛出的,表明 DbContext 已更改。在启用迁移之前,我确保现有表与删除的表之间没有依赖关系。我还收到一条错误消息,指出

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

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

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

对于您当前的问题,您能否详细说明具体问题?错误消息显示您需要自己修复的问题,不一定是 EF 的问题。

更新:

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

Database.SetInitializer<MyDbContext>(null);

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

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

对于自动迁移,您应该首先在数据库上下文构造函数中设置数据库初始化程序。

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

您还可以创建自定义数据库初始化器,实现 CreateDatabaseIfNotExists<YourDBContext> 并覆盖种子方法以提供初始数据。

其次,您应该使用程序包管理器控制台中的命令启用自动迁移 Enable-Migrations -EnableAutomaticMigrations

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

更新: 使用 Verbose with update database 命令查看生成了什么脚本

Update-Database –Verbose