C#-实体框架-首先是大型种子数据代码
我将在我的应用程序中创建一个初始表来存储我国家的所有城市/州。 这是一个相对较大的数据集:5k+注册表 阅读给了我一个很好的解决方法,尽管我认为将EF导入的sql文件保留在开放状态是一个安全缺陷 文件格式与此无关:如果我愿意,我可以将其设置为XLS或TXT;我可以简单地将其作为流读取并生成对象,而不是像本文中所示的那样作为SQL命令执行,如下一篇hiperlink教程中所示 首先阅读代码中的数据种子,我看到种子方法将在数据库初始化过程中执行,种子对象将在种子方法中生成 我的问题: 关于种子方法,最好的方法是什么,SQL文件方法还是对象方法? 我个人认为对象方法更安全,但可能会更慢,这就产生了我的第二个问题: 数据库初始化过程中执行的种子方法仅在创建数据库时执行?这对我来说有点不清楚 谢谢C#-实体框架-首先是大型种子数据代码,c#,entity-framework,ef-code-first,code-first,poco,C#,Entity Framework,Ef Code First,Code First,Poco,我将在我的应用程序中创建一个初始表来存储我国家的所有城市/州。 这是一个相对较大的数据集:5k+注册表 阅读给了我一个很好的解决方法,尽管我认为将EF导入的sql文件保留在开放状态是一个安全缺陷 文件格式与此无关:如果我愿意,我可以将其设置为XLS或TXT;我可以简单地将其作为流读取并生成对象,而不是像本文中所示的那样作为SQL命令执行,如下一篇hiperlink教程中所示 首先阅读代码中的数据种子,我看到种子方法将在数据库初始化过程中执行,种子对象将在种子方法中生成 我的问题: 关于种子方法,
System.Data
,并添加NuGet包protected override void Seed(BulkEntities context)
{
if (!context.BulkItems.Any())
{
var items = Enumerable.Range(0, 100000)
.Select(s => new BulkItem
{
Name = s.ToString(),
Status = "asdf"
});
context.BulkInsert(items, 1000);
}
}
在这里插入100000个项目大约需要3秒钟。创建数据库或运行数据库迁移时,会执行
Seed
方法,如果要添加5k个实体,速度可能会非常慢。我会投票支持sql文件,因为它的执行速度要快得多。当我偶然发现使用EF添加大型对象集时,我必须在添加了约100个实体后将更改提交到db,这样添加下一个实体就不会花费太多时间(虽然使用EF 4),因为您不需要说明正在使用的数据库。但是,如果使用SQLServer,则应该考虑使用大容量复制或BCP.EXE加载数据库。这是加载数据库的最快方法。