【问题标题】:MVC C# Changing Database Structure Without Dropping DatabaseMVC C# 更改数据库结构而不删除数据库
【发布时间】:2016-04-20 17:50:44
【问题描述】:
如果我将属性添加到类或将整个类添加到数据库文件中的DbSet,实体框架应自动相应地添加表列。这工作正常,但我的问题是删除整个数据库并重新创建它。
我使用的远程服务器不允许我通过 Visual Studio 重新创建数据库,如果我添加/更改类/属性,我必须手动创建一个全新的数据库。此外,它不会让我删除对数据库的引用,即使它在技术上已被删除,所以我必须将新数据库重命名为另一个名称。
有什么方法可以轻松更改数据库的结构而无需删除和重新创建它?
【问题讨论】:
标签:
c#
.net
sql-server
asp.net-mvc
entity-framework
【解决方案1】:
是的,有办法。使用实体框架迁移。从包管理器控制台开始执行:
Enable-Migrations
这是 MSDN 上关于它的 article。仅当您使用实体框架代码优先方法时,您才可以选择使用迁移。
关于 EF 迁移的最酷之处在于,您可以启用自动迁移选项。基本上,所有不会影响数据库中数据完整性或丢失的架构更改(例如添加列或新表)都可以自动推送,而无需显式实施迁移。
【解决方案2】:
要求
将实体框架安装到您的 Visual Studio 应用程序
步骤
导入 CodeFirst 模型
(您似乎已经掌握了模型,只需确保它是 Code First 模型。)
-
在 VS 中使用包管理器控制台并运行:
Add-Migration -IgnoreChanges
在您的模型对象上,进行任何所需的更改
-
重做不带 -IgnoreChanges 标志的 Add-Migration 命令
Add-Migration
-
更新数据库
Update-Database
注意事项
您可以添加选项和 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.
}
}