2012-05-09 60 views
3

如何创建(种子)很多实体框架静态数据的?静态数据是指位于数据库中的数据,但只存在一次。如何使用实体框架为静态数据创建数据库?

比如在我的数据库,我有一个CountrySet,包含所有在地球上的国家。我希望这些国家永远在那里,但事实是,每当我清理我的数据库并重新创建新部署时,所有数据都将丢失。

我的应用程序启动时(如果它尚未创建)创建这一切似乎是相当敏感的时间。

我能做些什么吗?

回答

4

首先,我想问:

你熟悉你获得,当你设定自己的InitializerSeed功能?

例子:

在你的主函数写是这样的:

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 
     } 
    } 

,从一个项目,我已经躺在附近只是一些模板代码。

如果你确实重新创建数据库,每次话,我没有在所有的数据“手动”,并称知道任何其他方式“种子”的数据库。

在另一方面,如果你打算做比其他的东西你想改变它的细节每一次下探数据库,你可能有清除掉根据所有新数据手动写功能到一些逻辑。

我希望这回答了你的问题:)

ALSO:没有指定既不是问题,也不使用你在谈论哪种技术标签。我认为它是。如果不是这样,请重新标记/指定。

有一个愉快的一天:)

+0

+1很高兴看到答案与a-z解释! –

1

您可以设置一个初始值设定范围内,e.g:

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

其中 'MyInitializer' 是继承了IDatabaseInitializer<MyContext>接口的类。该接口有一个方法InitializeDatabase(TContext context),并且每当数据库(重新)创建时调用此方法。

在这个方法中,你可以使用任何手段要填充的分贝。

相关问题