C# 基础提供程序在打开时失败/该操作对于事务的状态无效

C# 基础提供程序在打开时失败/该操作对于事务的状态无效,c#,entity-framework,entity-framework-6,transactionscope,C#,Entity Framework,Entity Framework 6,Transactionscope,这是我的密码 public static string UpdateEmptyCaseRevierSet() { string response = string.Empty; using (System.Transactions.TransactionScope tran = new System.Transactions.TransactionScope()) { using (var db = new Entities.WaveEntities()) {

这是我的密码

public static string UpdateEmptyCaseRevierSet() {
    string response = string.Empty;
    using (System.Transactions.TransactionScope tran = new System.Transactions.TransactionScope()) {
        using (var db = new Entities.WaveEntities()) {
            var maxCaseReviewersSetID = db.CaseReviewerSets.Select(crs => crs.CaseReviewersSetId).Max();
            var emptyCHList = db.CaseHistories.Where(ch => ch.CaseReviewersSetID == null && ch.IsLatest == true && ch.StatusID != 100).ToList();
            for(int i=0; i < emptyCHList.Count; i++) {
                var emptyCH = emptyCHList[i];
                var newCaseReviewerSET = new Entities.CaseReviewerSet();
                newCaseReviewerSET.CreationCHID = emptyCH.CHID;
                db.CaseReviewerSets.Add(newCaseReviewerSET);
                emptyCH.CaseReviewerSet = newCaseReviewerSET;
            }
            db.SaveChanges();
        }
        tran.Complete();
    }
    return response;
}
public静态字符串updateEmptyCaseReviewerSet(){
字符串响应=string.Empty;
使用(System.Transactions.TransactionScope tran=new System.Transactions.TransactionScope()){
使用(var db=new Entities.WaveEntities()){
var maxCaseReviewersTed=db.CaseReviewerSets.Select(crs=>crs.CaseReviewersTed.Max();
var emptyCHList=db.casehistics.Where(ch=>ch.CaseReviewersSetID==null&&ch.IsLatest==true&&ch.StatusID!=100).ToList();
for(int i=0;i
“db.SaveChanges()上发生异常”

我在另一篇帖子中看到了同样的错误消息,内容是关于
“似乎我不能用TransactionScope块打开同一数据库的两个连接。”
,但我认为这与我的情况无关


此外,要插入和更新的记录总数为2700条,实际上并不多。但完成for语句确实需要相当多的时间(10分钟左右)。既然for语句中发生的所有事情实际上都发生在内存中,有人能解释一下为什么要花这么长时间吗

您可以使用最新的API尝试如下所示

注意:使用
foreach
而不是
for

using (var db = new Entities.WaveEntities()) 
  { 
    using (var dbContextTransaction = db.Database.BeginTransaction()) 
       { 
         try 
          { 
            var maxCaseReviewersSetID = db.CaseReviewerSets.Select(crs => crs.CaseReviewersSetId).Max();
            var emptyCHList = db.CaseHistories.Where(ch => ch.CaseReviewersSetID == null && ch.IsLatest == true && ch.StatusID != 100).ToList();

            foreach(var ch in emptyCHList) {
               var newCaseReviewerSET = new Entities.CaseReviewerSet();
               newCaseReviewerSET.CreationCHID = ch.CHID;
               db.CaseReviewerSets.Add(newCaseReviewerSET);
              }

                db.SaveChanges(); 
                dbContextTransaction.Commit(); 
          } 
     catch (Exception) 
        { 
           dbContextTransaction.Rollback(); 
        } 
 } 
} 

尝试增加
交易时间
对此有何反馈?感谢您抽出时间回复。它确实起作用了(虽然只有insert起作用而不是更新,但这是一个不同的问题),但我希望有人能向我解释一下,我以另一种方式执行时出错的原因。