C# - 实体框架 - 大型种子数据代码优先
本文关键字:代码 数据 大型 实体 框架 种子 | 更新日期: 2023-09-27 18:34:42
我将在我的应用程序中创建一个初始表来存储我所在国家/地区的所有城市/州。这是一个相对较大的数据集:5k+ 注册表。
阅读这篇文章启发了我一个很好的方法,尽管我认为将 EF 导入的 sql 文件公开是一个安全漏洞。
文件格式无关紧要:如果我愿意,我可以将其设为 XLS 或 TXT;而不是像帖子中所示将其作为 SQL 命令执行,我可以简单地将其读取为流并生成对象,如下一个 hiperlink 的教程所示。
阅读了这篇关于代码优先数据种子的教程,我看到种子方法将在数据库初始化过程中执行,种子对象在种子方法中生成。
我的问题:关于种子方法,最好的方法是什么,SQL文件方法还是对象方法?我个人认为对象方法更安全,但可能更慢,这会产生我的第二个问题:在数据库初始化过程中执行的种子方法,仅在创建数据库时执行?这对我来说有点不清楚。
谢谢。
-
引用数据库项目中的
System.Data
,并添加 NuGet 包 EntityFramework.BulkInsert。 -
如果检测到数据尚不存在,请将数据插入种子方法:
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); } }
在此处插入 100,000 个项目大约需要 3 秒。