Хобрук: Ваш путь к мастерству в программировании

Метод начального числа DropCrateDatabase не вызывается

Сначала я пытаюсь использовать код структуры сущности. Теперь я хочу заполнить свою базу данных образцами данных. Вот мой SampleDataClass:

public class SampleData:DropCreateDatabaseAlways<MyContext>
{
    protected override void Seed(MyContext context)
    {
        var products = new List<Product>
        {
            new Product{Name="prod1"},
            new Product{Name="prod2"}
        };

        products.ForEach(i => context.Products.Add(i));
    }
}

Класс MyContext:

public class MyContext:DbContext
{
    public MyContext():base("MyCon")
    {
        this.Configuration.LazyLoadingEnabled = true;
    }

    public DbSet<Product> Products { get; set; }
}

Класс строки соединения:

  <connectionStrings>
    <add name="MyCon" connectionString="Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=DatabaseName;Integrated Security=True;" providerName="System.Data.SqlClient" />
  </connectionStrings>

И я устанавливаю инициализатор в методе Application_Start:

    protected void Application_Start()
    {
        Database.SetInitializer(new Models.SampleData());

        AreaRegistration.RegisterAllAreas();
        RouteConfig.RegisterRoutes(RouteTable.Routes);
    }

Но ничего не произошло. В чем проблема?


  • Вы должны инициализировать контекст и получить доступ к DbSet, т.е. в методе действия. Вот когда создается база данных. 18.09.2017

Ответы:


1

ПРИМЕЧАНИЕ

Приведенный ниже код указывает EF удалить и заново создать вашу базу данных, когда он сочтет это необходимым. Это ОЧЕНЬ разрушительно! Вы должны изменить значение DropCreateDatabaseIfModelChanges, а также инициализацию конфигурации, чтобы предотвратить это (две следующие строки - это инициализация конфигурации)

AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = true;

КОНЕЦ ПРИМЕЧАНИЕ

В вашем Application_start() вы должны вызвать что-то вроде этого

Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MyContext>());

using (var context = new MyContext())
{
    new MigrateDatabaseToLatestVersion<MyContext, Configuration>().InitializeDatabase(context);
}

при этом Configuration является классом, объявленным в Migrations\Configuration.cs, который имеет такое определение, как

internal sealed class Configuration : DbMigrationsConfiguration<Context>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = true;
        AutomaticMigrationDataLossAllowed = true;
    }

    protected override void Seed(FoyerRural.Models.Contexts.Context context)
    {
     // Database code
    }
}

можно создать файл Configuration.cs. Для этого вы можете следовать это руководство.

TLDR; Tools --> NuGet Package Manager --> Package Manager Console и выполнить Enable-Migrations)

18.09.2017
  • Спасибо, это все. Я уже сделал это с другим проектом. Я не могу вспомнить, что именно я делал, но я уверен, что не использовал там enable-migration. Но это работает, и это нормально. 19.09.2017
  • Да, есть какой-то дополнительный код, который точно не отвечает на ваш вопрос, потому что я использовал пример из одного из своих проектов, поэтому я уверен, что этот код работает, но я не тестировал другие настройки... так что Я предпочел дать вам тестирование, чем :-) 19.09.2017
  • Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

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

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

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..