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起作用而不是更新,但这是一个不同的问题),但我希望有人能向我解释一下,我以另一种方式执行时出错的原因。