小编Mik*_*nes的帖子

Guid.NewGuid() 在 Parallel.For 循环中使用时返回重复值

我有一个正在访问 API 的应用程序。因此,它对对象中的所有 ID 进行查询,然后必须对每个 ID 一次查询一个项目。我在 Parallel.For 循环中执行此操作并将每个项目数据添加到数据表中的一行。然后我使用 sqlbulkcopy 将数据表发送到 SQL 服务器表。

如果我在不使用 Parallel.For 的情况下执行此操作,则效果很好。但是,对于 Parallel.For,这一行:

workrow["id"] = Guid.NewGuid();
Run Code Online (Sandbox Code Playgroud)

正在生成重复的 Guid。它经常这样做并导致数据无法加载到 SQL 服务器表中,因为 SQL 中的 id 行是主键并且不允许重复。我尝试锁定:

                    lock (lockobject)
                    {
                        workrow["id"] = Guid.NewGuid();
                    }
Run Code Online (Sandbox Code Playgroud)

这没有帮助。
我尝试不为该字段分配一个 id,希望 SQL 会生成它(它在该字段上确实有 newid())。说它不能插入空值失败了。我似乎不能只是从数据表中删除 id 字段,因为当我执行 sqlbulkcopy 时,列不会对齐。

有人可以在这里帮助我吗?我要么需要弄清楚如何让 Guid.NewGuid() 停止生成重复项,要么我需要找出一种不传入 id(始终是数据表中的第一个字段)的方法,以便 SQL 生成 id。

这是我用来生成表之一的代码:

        public static DataTable MakeWorkflowTable()
        {
            DataTable Workflow = new DataTable("Workflow");
            DataColumn id = new DataColumn("id", System.Type.GetType("System.Guid"));
            Workflow.Columns.Add(id);
            DataColumn OrgInfoID = new DataColumn("OrgInfoID", System.Type.GetType("System.Guid"));
            Workflow.Columns.Add(OrgInfoID);
            DataColumn Name = …
Run Code Online (Sandbox Code Playgroud)

c# sql-server multithreading guid sqlbulkcopy

4
推荐指数
1
解决办法
884
查看次数

标签 统计

c# ×1

guid ×1

multithreading ×1

sql-server ×1

sqlbulkcopy ×1