这是我面临的一个典型问题。 我想使用异步TPL在数据库中插入2k行,其中每个记录都有一个增量顺序键。
我的服务端有三层:
以下是:
在服务方面:
首先,我从数据库中获取max seq密钥。
Data.Upload.UploadDetails gd = new Data.Upload.UploadDetails();
try
{
var Max_seq_key = gd.getGroupMembershipSeqKeyDetails();
此 getGroupMembershipSeqKeyDetails 方法位于 DAL图层中,如下所示:
public long getGroupMembershipSeqKeyDetails()
{
Repository rep = new Repository();
string strSPQuery = string.Empty;
List<long> listSeqKey = new List<long>();
long strMaxSeqKey = -1;
try
{
listSeqKey = rep.ExecuteSqlQuery<Int64>(SQL.Upload.UploadDetails.getMaxSeqKeySQL()).ToList();
strMaxSeqKey = listSeqKey[0] != null ? listSeqKey[0] : strMaxSeqKey;
return strMaxSeqKey;
}
catch (Exception e)
{
return strMaxSeqKey;
}
}
因此,在服务层,我从数据库中获取最大seq密钥。
现在我想使用来自服务端的以下声明插入2k记录。
foreach (var grpMem in input.ListGroupMembershipUploadDetailsInput.GroupMembershipUploadInputList)
{
try
{
Task.Run(() => gd.insertGroupMembershipUploadDetails(grpMem,
input.ListChapterUploadFileDetailsInput, ++Max_seq_key, ++Max_grp_seq_key, Lst_com_unit_key, trans_key));
}
但 ++ Max_seq_key 并不总能得到保证。
有时我会得到数据库中的结果:
如何确保此增量seq键总是大于前一个插入记录的1,当然在另一个线程上运行?