首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何首先使用EF代码有效地初始化一个大种子?

如何首先使用EF代码有效地初始化一个大种子?
EN

Stack Overflow用户
提问于 2014-10-06 18:26:10
回答 1查看 1.4K关注 0票数 2

我们首先在Server中使用EF代码,并且在创建数据库时必须初始化一组相当大的主数据(~150.000条记录)。如果可以在db-intializer的Seed方法中完成这一操作,将是非常方便的。

我已经生成了初始化此数据的SQL脚本。脚本由行组成,其中每一行都包含一千条记录的插入操作。其原因是INSERT命令在单个命令中的总记录限制为1000条。

因此,脚本类似于以下内容:

代码语言:javascript
运行
复制
INSERT INTO MyTable (A, B, C) VALUES (1, 2, 3), (2, 3, 4), ... 1000 records here ... (3, 4, 5);
INSERT INTO MyTable (A, B, C) VALUES (4, 5, 6), (5, 6, 7), ... 1000 records here ... (6, 7, 8);
.... 150 lines

Seed方法的初始化部分如下所示:

代码语言:javascript
运行
复制
foreach (string command in File.ReadAllLines("InsertMasterData.sql"))
{
    context.Database.ExecuteSqlCommand(command);
}

但是,在我的开发人员机器上使用SQL LocalDB实例几乎需要2分钟(在生产中使用的完整Server上,它可能会更快,但使用LocalDB进行开发很方便)。

有什么办法让这个更快吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-07 15:11:16

我们有一个类似的情况,我们种子脚本。这是我们的密码。您不需要使用异步方法。它在当地的几秒钟内就产生了大约35,000条记录。

代码语言:javascript
运行
复制
foreach (string file in files)
            {
                var fileInfo = new FileInfo(file);

                Console.WriteLine("Running script {0}", fileInfo.Name);

                string text = fileInfo.OpenText().ReadToEnd();

                using (var conn = new SqlConnection(connectionString))
                {
                    using (var cmd = new SqlCommand(text, conn))
                    {
                        conn.Open();

                        await cmd.ExecuteNonQueryAsync();
                    }
                }
            }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26222443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档