ASP MVC-код первое обновление модели без потери данных - PullRequest
0 голосов
/ 15 мая 2019

У меня есть следующее 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; }
    }
}

Теперь я хочу добавить другую модель, но не хочу терять данные, которые существуют в текущей базе данных.

Как можноДобавить модель в мой DbContext без потери данных?

1 Ответ

1 голос
/ 15 мая 2019

Вместо использования DropCreateDatabaseIfModelChanges<TContext> в качестве IDatabaseInitializer<TContext> используйте MigrateDatabaseToLatestVersion<TContext,TMigrationsConfiguration>, который определит изменения в вашей 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; }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...