C# - 实体框架 - 大型种子数据代码优先

本文关键字:代码 数据 大型 实体 框架 种子 | 更新日期: 2023-09-27 18:34:42

我将在我的应用程序中创建一个初始表来存储我所在国家/地区的所有城市/州。这是一个相对较大的数据集:5k+ 注册表。

阅读这篇文章启发了我一个很好的方法,尽管我认为将 EF 导入的 sql 文件公开是一个安全漏洞。

文件格式无关紧要:如果我愿意,我可以将其设为 XLS 或 TXT;而不是像帖子中所示将其作为 SQL 命令执行,我可以简单地将其读取为流并生成对象,如下一个 hiperlink 的教程所示。

阅读了这篇关于代码优先数据种子的教程,我看到种子方法将在数据库初始化过程中执行,种子对象在种子方法中生成。

我的问题:关于种子方法,最好的方法是什么,SQL文件方法还是对象方法?我个人认为对象方法更安全,但可能更慢,这会产生我的第二个问题:在数据库初始化过程中执行的种子方法,仅在创建数据库时执行?这对我来说有点不清楚。

谢谢。

C# - 实体框架 - 大型种子数据代码优先

  1. 引用数据库项目中的System.Data,并添加 NuGet 包 EntityFramework.BulkInsert。

  2. 如果检测到数据尚不存在,请将数据插入种子方法:

    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 秒。