Как я могу предотвратить воссоздание моей базы данных без заполнения? - PullRequest
2 голосов
/ 26 февраля 2012

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

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

Вот еще информация, которая, я надеюсь, поможет:

Мой инициализатор

DropCreateDatabaseIfModelChanges<SchoolInDB>
{

    protected override void Seed(SchoolInDB context)
    {

        context.Parents.Add(new Parent { Name = "Mary Lawson", Phone = "949-999-9999", Notes = "Please see IEP " });


        base.Seed(context);


    }

}

Запуск моего приложения

protected void Application_Start()
    {
     System.Data.Entity.Database.SetInitializer(new System.Data.Entity.DropCreateDatabaseAlways<SchoolIn.Models.SchoolInDB>()); 

        AreaRegistration.RegisterAllAreas();
        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
    }

Мой DBContext

public class SchoolInDB : DbContext
{
    public DbSet<Course> Courses { get; set; }
    public DbSet<Teacher> Teachers { get; set; }
    public DbSet<Parent> Parents { get; set; }
    public DbSet<PdfReport> PdfReports { get; set; }
    public DbSet<CourseProgress> CourseProgresses { get; set; }
    public DbSet<ParentContact> ParentContacts { get; set; }
    public DbSet<RedAlert> RedAlerts { get; set; }
    public DbSet<Student> Students { get; set; }
    public DbSet<Assignment> Assignments { get; set; }


}

Моя строка подключения

<connectionStrings>
<add name="ApplicationServices"
    connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"
    providerName="System.Data.SqlClient" />

Полагаю, я хочу избежать использования SetInitializer для DropCreateDatabaseAlways и просто загрузить базу данных независимо от того, изменяются модели или нет.Я буду использовать мастер импорта и экспорта для заполнения базы данных.

Спасибо за помощь!

Ответы [ 2 ]

1 голос
/ 22 апреля 2016

Чтобы уточнить ответ RickAnd, для будущих искателей, ищущих ответ.

Я предполагаю, что ваше полное объявление класса инициализатора ..

public class ApplicationDbInitializer : DropCreateDatabaseAlways<SchoolInDB> 

Вам просто нужно заменить это на ...

public class ApplicationDbInitializer : CreateDatabaseIfNotExists<SchoolInDB>

Таким образом, ваша база данных будет по-прежнему инициализироваться с вашими начальными значениями, но не будет отбрасываться при каждом запуске приложения.

1 голос
/ 27 февраля 2012

Полагаю, я хочу избежать использования SetInitializer для DropCreateDatabaseAlways и просто загружать базу данных независимо от того, изменяются модели или нет. Я буду использовать Мастер импорта и экспорта для заполнения базы данных

Так что не вызывайте SetInitializer. Просто используйте строку подключения, чтобы открыть БД. Кстати, DropCreateDatabaseIfModelChanges, как следует из названия, удаляет / создает БД только при изменении схемы.

Вот так работает традиционная БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...