C# 如何使用实体框架为数据库添加静态数据种子?
如何在实体框架中创建(种子)大量静态数据?静态数据是指位于数据库中但只存在一次的数据 例如,在我的数据库中,我有一个CountrySet,包含全球所有国家。我希望这些国家总是在那里,但事实是,每次我删除数据库并重新创建以用于新部署时,所有数据都会丢失 当我的应用程序启动时(如果尚未创建)创建所有这些内容似乎对时间非常敏感C# 如何使用实体框架为数据库添加静态数据种子?,c#,.net,entity-framework,entity-framework-4.3,entity-framework-4.3.1,C#,.net,Entity Framework,Entity Framework 4.3,Entity Framework 4.3.1,如何在实体框架中创建(种子)大量静态数据?静态数据是指位于数据库中但只存在一次的数据 例如,在我的数据库中,我有一个CountrySet,包含全球所有国家。我希望这些国家总是在那里,但事实是,每次我删除数据库并重新创建以用于新部署时,所有数据都会丢失 当我的应用程序启动时(如果尚未创建)创建所有这些内容似乎对时间非常敏感 我能在这里做什么?首先,让我问一下: 您是否熟悉设置自己的初始值设定项时可以访问的种子功能 例如: 在main函数中编写如下内容: System.Data.Entity.Dat
我能在这里做什么?首先,让我问一下: 您是否熟悉设置自己的
初始值设定项时可以访问的种子
功能
例如:
在main函数中编写如下内容:
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
}
}
公共类SystemContext:DbContext
{
公共数据库集存储{get;set;}
公共数据库集StockRawValues{get;set;}
公共系统上下文()
:base(“Server=localhost;Database=test;Trusted_Connection=True;”)
{ }
公共类系统初始值设定项:DropCreateDatabaseIfModelChanges
{
#区域种子
//这就是你要找的!
受保护的覆盖无效种子(SystemContext上下文)
{
尝试
{
var stock=新股票(){Symbol=“TEST”};
context.Stocks.Add(stock);
SaveChanges();
}
catch(异常ex){Console.Error.WriteLine(ex.Message);}
种子(上下文);
}
#端区
}
}
这只是我在一个项目中的一些模板代码
如果您确实每次都在创建数据库,那么我不知道有任何其他方法可以在不“手动”添加所有数据的情况下“种子”数据库
另一方面,如果您计划在每次更改数据库中的详细信息时执行除删除数据库以外的操作,则可能必须手动编写函数,根据某些逻辑清除所有新数据
我希望这能回答你的问题:)
另外:您既没有在问题中指定,也没有使用标签指定您正在谈论的技术。我以为是,然后。如果不是这样,请重新标记/指定
祝您愉快:)您可以为上下文设置初始值设定项,例如:
System.Data.Entity.Database.SetInitializer(新的MyInitializer())代码>
其中,“MyInitializer”是继承IDatabaseInitializer
接口的类。此接口有一个方法InitializeDatabase(TContext context)
,每当(重新)创建数据库时,都会调用此方法
在这个方法中,您可以使用任何您想要填充数据库的方法