Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-实体框架-首先是大型种子数据代码_C#_Entity Framework_Ef Code First_Code First_Poco - Fatal编程技术网

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

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教程中所示 首先阅读代码中的数据种子,我看到种子方法将在数据库初始化过程中执行,种子对象将在种子方法中生成 我的问题: 关于种子方法,

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

阅读给了我一个很好的解决方法,尽管我认为将EF导入的sql文件保留在开放状态是一个安全缺陷

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

首先阅读代码中的数据种子,我看到种子方法将在数据库初始化过程中执行,种子对象将在种子方法中生成

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

谢谢

  • 在数据库项目中引用
    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加载数据库。这是加载数据库的最快方法。