MVC C#在不删除数据库的情况下更改数据库结构

时间:2016-04-20 17:50:45

标签: c# .net sql-server asp.net-mvc entity-framework

如果我向类中添加属性或将整个类添加到数据库文件中的DbSet,则Entity Framework应相应地自动添加表列。这工作正常,但我的问题是删除整个数据库并重新创建它。

我使用的远程服务器不允许我通过Visual Studio重新创建数据库,如果我添加/更改类/属性,我必须手动创建一个全新的数据库。此外,它不会让我删除对数据库的引用,即使它在技术上已被删除,所以我必须将新数据库重命名为另一个名称。

有没有什么方法可以轻松地更改数据库的结构而不删除并重新创建它?

2 个答案:

答案 0 :(得分:4)

是的,有办法。使用实体框架迁移。从包管理器控制台执行此操作开始:

Enable-Migrations

这是关于它的MSDN上的article。只有在使用“实体框架代码优先”方法时,才可以选择使用迁移。

EF迁移很酷的一点是,您可以启用自动迁移选项。基本上,所有不会影响数据完整性或丢失的架构更改(例如,在数据库中添加列或新表)都可以自动推送,而无需显式实现迁移。

答案 1 :(得分:0)

要求

将实体框架安装到Visual Studio应用程序

的步骤

  1. 导入CodeFirst模型 (您似乎已经拥有了您的模型,只需确保它是代码优先模型。)

  2. 使用VS中的包管理器控制台并运行:

    Add-Migration -IgnoreChanges

  3. 在您的模型对象上,进行任何所需的更改

  4. 重做不带-IgnoreChanges标志的Add-Migration命令

    Add-Migration

  5. 更新数据库

    Update-Database

  6. 注释

    您可以添加选项和C#文件来控制迁移

    Update-Database -ProjectName Model -StartUpProjectName Model -Verbose -ConfigurationTypeName SpecialConfigurationForThisMigration

    SpecialConfigurationForThisMigration.cs

    internal sealed class Configuration : DbMigrationsConfiguration<Model.Model>
        {
            public Configuration()
            {
                AutomaticMigrationsEnabled = false;
                MigrationsDirectory = @"Customer\\Migrations";
            }
    
            protected override void Seed(Model.Model context)
            {
                //  This method will be called after migrating to the latest version.
    
                //  You can use the DbSet<T>.AddOrUpdate() helper extension method 
                //  to avoid creating duplicate seed data. E.g.
    
            }
        }