2012-05-09 3 views
3

Как создать (seed) много статических данных в Entity Framework? По статическим данным я имею в виду данные, которые находятся в базе данных, но существует только один раз.Как я могу засеять базу данных статическими данными с помощью Entity Framework?

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

Создание всего этого, когда мое приложение запускается (если оно еще не создано), похоже, очень чувствительно к времени.

Что я могу сделать здесь?

ответ

4

Прежде всего, позвольте мне спросить:

Вы знакомы с Seed функции, вы получаете доступ к когда вы устанавливаете свой собственный Initializer?

Пример:

В вашей основной функцией записи что-то вроде этого:

System.Data.Entity.Database.SetInitializer(new SystemContext.SystemInitializer()); 

Где SystemContext ваш DbContext класса.

И в этом классе вы должны иметь что-то вроде:

public class SystemContext : DbContext 
    { 
     public DbSet<Stock> Stocks { get; set; } 
     public DbSet<RawDayValues> StockRawValues { get; set; } 

     public SystemContext() 
      : base("Server=localhost;Database=test;Trusted_Connection=True;") 
     { } 

     public class SystemInitializer : DropCreateDatabaseIfModelChanges<SystemContext> 
     { 
      #region SEED 
      // This is what you're looking for! 
      protected override void Seed(SystemContext context) 
      { 
       try 
       { 
        var stock = new Stock() { Symbol = "TEST" }; 
        context.Stocks.Add(stock); 
        context.SaveChanges(); 
       } 
       catch (Exception ex) { Console.Error.WriteLine(ex.Message); } 
       base.Seed(context); 
      } 

      #endregion 
     } 
    } 

Вот только некоторые шаблон кода из проекта я валяется.

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

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

Я надеюсь, что это ответ на ваш вопрос :)

ТАКЖЕ: Вы не указали ни в вопросе, ни с помощью тегов, какие технологии вы говорите. Я предположил, что это , и . Если это не так, пожалуйста, перемаркируйте/укажите.

имеет хороший день :)

+0

+1 Приятно видеть ответ с объяснением a-z! –

1

Вы можете установить инициализатор для контекста, например:

System.Data.Entity.Database.SetInitializer<MyContext>(new MyInitializer());

где 'MyInitializer' это класс, который наследует интерфейс IDatabaseInitializer<MyContext>. Этот интерфейс имеет метод InitializeDatabase(TContext context), и этот метод вызывается всякий раз, когда создается база данных (повторно).

В рамках этого метода вы можете использовать любые средства, которые хотите заполнить db.

 Смежные вопросы

  • Нет связанных вопросов^_^