C# 将批量数据插入到一对多关系中的表中

C# 将批量数据插入到一对多关系中的表中,c#,.net,npgsql,C#,.net,Npgsql,我有一个使用Npgsql连接到Postgres数据库的.NET应用程序,我正在尝试将数据导入两个表,比如用户和TODO。用户有许多待办事项。用户表有一个由DB自动设置的id列,Todos表有一个名为User\u id的用户表外键 现在,我知道如何插入用户,我知道如何插入TODO,但我不知道如何为这些TODO设置user\u id,因为只有在将用户插入数据库后才能知道用户的id列。有什么想法吗?这取决于导入方式和使用的工具。如果您使用的是原始INSERT语句,PostgreSQL有一个RETURN

我有一个使用Npgsql连接到Postgres数据库的.NET应用程序,我正在尝试将数据导入两个表,比如用户和TODO。用户有许多待办事项。用户表有一个由DB自动设置的
id
列,Todos表有一个名为
User\u id
的用户表外键


现在,我知道如何插入用户,我知道如何插入TODO,但我不知道如何为这些TODO设置
user\u id
,因为只有在将用户插入数据库后才能知道用户的
id
列。有什么想法吗?

这取决于导入方式和使用的工具。如果您使用的是原始INSERT语句,PostgreSQL有一个RETURNING子句,它将返回插入语句的ID()

如果您使用的是二进制复制(这是大容量导入数据的最有效方式),则没有这样的选项。在这种情况下,一个好方法是一次“分配”所有ID,方法是增加ID列后面的序列,然后在导入时发送ID。这意味着数据库不再生成这些ID,而是像其他字段一样显式地发送它们

实际上,假设您有100个用户(以及任意数量的待办事项)。您可以对
setval
执行一次调用,将序列增加100,然后您可以导入用户,将其ID显式设置为这100个值。这也允许您在TODO上指定用户ID。但是,如果您这样做,请注意如果其他人同时修改序列,则会出现并发问题