使用具有线程安全性的C#获取插入行的id

使用具有线程安全性的C#获取插入行的id,c#,mysql,C#,Mysql,在这个问题中,一些评论提到last_insert_id/LastInsertedId不是线程安全的,那么线程安全的方式是什么?像下面这样的交易够了吗 MySqlTransaction tr = mysqlcon.BeginTransaction(); MySqlCommand cmd=new MySqlCommand("insert ...", mysqlcon, tr); cmd.ExecuteNonQuery(); long id = cmd.LastInsertedId; tr.Comm

在这个问题中,一些评论提到last_insert_id/LastInsertedId不是线程安全的,那么线程安全的方式是什么?像下面这样的交易够了吗

MySqlTransaction tr = mysqlcon.BeginTransaction();
MySqlCommand cmd=new MySqlCommand("insert ...", mysqlcon, tr);
cmd.ExecuteNonQuery();
long id = cmd.LastInsertedId; 
tr.Commit();

你读过关于共享连接的其他评论吗?这就是全部要点,除非您使用许多不同的线程和单个连接运行应用程序,否则您不会有问题。但是,如果您在不同线程上运行insert语句,并且正在使用共享连接,则最后一个插入的id可能会被覆盖,因为另一个线程在最后一个线程完成其对最后一个插入id的请求之前运行insert查询。@SirRufo I隐式表示该连接已被覆盖shared@jgetner那么答案是否定的?非共享连接是唯一的方法吗?我使用共享连接,因为非共享意味着每个线程上都有我不熟悉的连接的线程池。在我的电脑中,有一些工作需要通过线程来完成,而不是一些固定的线程。你的家用汽车也是如此。你们中的一些人共用一辆车,但只有一个人可以驾驶,其他所有人必须等待司机完成驾驶后才能驾驶;o)