Sql server asp mvc代码首次更新模型而不丢失数据

Sql server asp mvc代码首次更新模型而不丢失数据,sql-server,asp.net-mvc,entity-framework,Sql Server,Asp.net Mvc,Entity Framework,我有以下DbContext: namespace Tasks.Models { public class TaskDBInitializer : DropCreateDatabaseIfModelChanges<TasksContext> { protected override void Seed(TasksContext context) { var projects = new List<Proje

我有以下
DbContext

namespace Tasks.Models
{
    public class TaskDBInitializer :  DropCreateDatabaseIfModelChanges<TasksContext>
    {
        protected override void Seed(TasksContext context)
        {
            var projects = new List<Projects>
            {
                new Projects{ Title="proTitle", Describe="proDescribe" },
            };
            projects.ForEach(p => context.Projects.Add(p));
            context.SaveChanges();
            base.Seed(context);;
        }
    }

    public class TasksContext : DbContext
    {
        public TasksContext() : base("name=TaskDB")
        {
            Database.SetInitializer(new TaskDBInitializer());
        }
        public DbSet<Task> Task { get; set; }
        public DbSet<Projects> Projects { set; get; }
    }
}
命名空间任务.模型
{
公共类TaskDBInitializer:DropCreateDatabaseIfModelChanges
{
受保护的覆盖无效种子(TasksContext上下文)
{
var项目=新列表
{
新项目{Title=“proTitle”,descripe=“prodescripe”},
};
projects.ForEach(p=>context.projects.Add(p));
SaveChanges();
种子(上下文);;
}
}
公共类任务上下文:DbContext
{
public TasksContext():base(“name=TaskDB”)
{
SetInitializer(新的TaskDBInitializer());
}
公共数据库集任务{get;set;}
公共数据库集项目{set;get;}
}
}
我现在想添加另一个模型,但不想丢失当前数据库中存在的数据


如何将模型添加到我的
DbContext
中而不丢失数据?

而不是使用
DropCreateDatabaseIfModelChanges
作为
IDatabaseInitializer
使用,它将确定
DbContext
中的更改,然后更新现有数据库以使其兼容

下面是一个如何实现
MigrateDatabaseToLatestVersion
初始值设定项的示例:

namespace Tasks.Models
{
    public sealed class TaskDBConfiguration : DbMigrationsConfiguration<TasksContext>
    {
        public TaskDBConfiguration()
        {
            AutomaticMigrationsEnabled = true;
            AutomaticMigrationDataLossAllowed = false;
        }

        protected override void Seed(TasksContext context)
        {
            var projects = new List<Projects>
            {
                new Projects { Title = "proTitle", Describe = "proDescribe" },
            };

            projects.ForEach(p => context.Projects.Add(p));

            context.SaveChanges();

            base.Seed(context);
        }
    }

    public class TasksContext : DbContext
    {
        public TasksContext() : base("name=TaskDB")
        {
            Database.SetInitializer<TasksContext>(
              new MigrateDatabaseToLatestVersion<TasksContext, TaskDBConfiguration>()
            );
        }

        public DbSet<Task> Task { get; set; }
        public DbSet<Projects> Projects { set; get; }
    }
}
命名空间任务.模型
{
公共密封类TaskDBConfiguration:DbMigrationsConfiguration
{
公共任务数据库配置()
{
AutomaticMiggerationsEnabled=真;
AutomaticMigrationDataLossAllowed=false;
}
受保护的覆盖无效种子(TasksContext上下文)
{
var项目=新列表
{
新项目{Title=“proTitle”,descripe=“prodescripe”},
};
projects.ForEach(p=>context.projects.Add(p));
SaveChanges();
种子(上下文);
}
}
公共类任务上下文:DbContext
{
public TasksContext():base(“name=TaskDB”)
{
Database.SetInitializer(
新的MigrateDatabaseToLatestVersion()
);
}
公共数据库集任务{get;set;}
公共数据库集项目{set;get;}
}
}

那么,我可以在此表单中使用“种子”吗?它出错了:您的项目表不存在。我做了一些错误的事情吗?我更新了我的解决方案以包含Seed方法,并将初始值设定项的指定移回DbContext构造函数中。您仍然收到错误吗?如果是,您可以将其添加到注释中。我有“System.Data.SqlClient.SqlException:'数据库中已经有一个名为'Projects'的对象。”错误。请尝试在中运行
add Migration Initial-IgnoreChanges
。在运行该命令之前,请确保将包含DbContext的项目选择为“默认项目”。