Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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_Entity Framework 5 - Fatal编程技术网

C# 使用实体框架代码优先迁移播种大型查找表数据

C# 使用实体框架代码优先迁移播种大型查找表数据,c#,entity-framework,entity-framework-5,C#,Entity Framework,Entity Framework 5,我即将开始一个新项目,我想先使用实体框架代码迁移;i、 例如,用代码编写数据库,并让它为我自动生成,更新模式等 然而,我的绊脚石是我有一个需要导入的查找表,它有超过200万条记录(这是一个后代码查找表) 我的问题是,如何在Entity Framework Code First迁移中处理如此大的预填充查找表?您的迁移实际上不必删除/重新创建整个表(并且除非您指定它应该删除/重新创建)。通常情况下,迁移只需执行Up/Down方法,以使用附加列等更改表 你真的需要放下桌子吗?如果是这样的话,你真的需要

我即将开始一个新项目,我想先使用实体框架代码迁移;i、 例如,用代码编写数据库,并让它为我自动生成,更新模式等

然而,我的绊脚石是我有一个需要导入的查找表,它有超过200万条记录(这是一个后代码查找表)


我的问题是,如何在Entity Framework Code First迁移中处理如此大的预填充查找表?

您的迁移实际上不必删除/重新创建整个表(并且除非您指定它应该删除/重新创建)。通常情况下,迁移只需执行Up/Down方法,以使用附加列等更改表

你真的需要放下桌子吗?如果是这样的话,你真的需要从EF那里播种吗?执行200万次插入的EF成本将是惊人的,因此,如果您可以将其作为一个更有效的手动步骤(使用批量插入),它将是非常首选的


如果我必须进行这么多的插入,我可能会将其分解为SQL文件,并执行类似于此处所述的操作:

种子方法的问题是它运行每次迁移,因此您必须编写SQL,在插入之前检查数据是否不存在。我认为在迁移@Colin的Up()方法中使用Sql(“INSERT..”)添加固定数据更好。当我们谈论200万条记录时,我完全不同意。必须在SQL顶部编写EXISTS语句,使其在10分钟内运行,而不是在10小时内运行,这似乎是一个很好的权衡。在确认答案之前,我将进行更多的实验。谢谢你的帮助。@wilso132。对不起,我的意思不清楚。如果将代码添加到Seed方法中,那么每次更新数据库时都会运行代码,并且会有2000000条记录,即使使用EXISTS检查,这些记录也可能很昂贵。如果在迁移中执行插入,则代码仅在应用该迁移时运行。把它放在正确的迁移中,你知道记录不存在,你可以考虑离开存在检查。您还应该删除Down()中的记录,以确保仍然可以完全删除记录,然后进行备份您可能会发现此博客与此问题相关-