在transactionscope上生成的主键

时间:2019-06-12 22:00:48

标签: entity-framework transactionscope

作为上面的标题,我想获取在事务范围内插入的最新插入的行

在标题行和明细行中提供了一些在标题中划分的类别的情况

using (var scope = new TransactionScope())
{
    // some header processing
    foreach (var objHD in header_object)
    {
        var headerNo = context.Header.AsNoTracking()
                              .Select(s => s.HeaderNo).Max();

        if (string.IsNullOrEmpty(headerNo))
        {
            headerNo = "HEADER - 10000001";
        }
        else 
        {
            int no_series = Convert.ToInt32(headerNo.Replace("Header - ", ""));
            no_series = no_series  + 1;
            headerNo = "HEADER - " + no_series;
        }

        objHD.Header_No = headerNo;

        // some header processing
        context. Header.Add(objHD);

        // some detail row processing 
        context.SaveChanges();
        scope.Complete();
        scope.Dispose();
    }
}  

我收到此错误:

  

违反主键约束

经过调试,我无法从上下文中获得最新的主键,它总是获得在作用域之前插入的最新主键之前的最后一行

因此,如果在作用域开始之前,最新的no_series是100000012,则每次循环内它总是得到的数字100000012

换句话说,变量no_series始终为100000013

0 个答案:

没有答案