如何创建(种子)很多实体框架静态数据的?静态数据是指位于数据库中的数据,但只存在一次。如何使用实体框架为静态数据创建数据库?
比如在我的数据库,我有一个CountrySet,包含所有在地球上的国家。我希望这些国家永远在那里,但事实是,每当我清理我的数据库并重新创建新部署时,所有数据都将丢失。
我的应用程序启动时(如果它尚未创建)创建这一切似乎是相当敏感的时间。
我能做些什么吗?
如何创建(种子)很多实体框架静态数据的?静态数据是指位于数据库中的数据,但只存在一次。如何使用实体框架为静态数据创建数据库?
比如在我的数据库,我有一个CountrySet,包含所有在地球上的国家。我希望这些国家永远在那里,但事实是,每当我清理我的数据库并重新创建新部署时,所有数据都将丢失。
我的应用程序启动时(如果它尚未创建)创建这一切似乎是相当敏感的时间。
我能做些什么吗?
首先,我想问:
你熟悉你获得,当你设定自己的Initializer
到Seed
功能?
例子:
在你的主函数写是这样的:
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:没有指定既不是问题,也不使用你在谈论哪种技术标签。我认为它是c#,.net和entity-framework-4.3.1。如果不是这样,请重新标记/指定。
有一个愉快的一天:)
您可以设置一个初始值设定范围内,e.g:
System.Data.Entity.Database.SetInitializer<MyContext>(new MyInitializer());
其中 'MyInitializer' 是继承了IDatabaseInitializer<MyContext>
接口的类。该接口有一个方法InitializeDatabase(TContext context)
,并且每当数据库(重新)创建时调用此方法。
在这个方法中,你可以使用任何手段要填充的分贝。
+1很高兴看到答案与a-z解释! –