Entities data=new Entities(); var list = from p in data.Record where p.CreateTime >= d && p.CreateTime < DateTime.Today select new { ID = p.ID, Name = p.Name, UserID=p.UserID }; foreach (var item in list) { var record = data.Record.FirstOrDefault(a => a.ID == item.ID); if (record != null) { record.RankTime = record.CreateTime.AddDays(3); data.SaveChanges(); BusinessModel.KeywordRank mod = new KeywordRank(); mod.RecordID = item.ID; mod.UserID = item.UserID; mod.Name = item.Name; mod.Rank = 0; mod.CreateTime = DateTime.Now; data.KeywordRank.Add(mod); data.SaveChanges(); //此处抛异常 在提供程序连接上启动事务时出错。有关详细信息,请参阅内部异常。 } }
这样的操作还需要启用事务么? 判断是因为在增加数据的同时读取操作还在进行,所以抛异常。Entities data=new Entities();如果在new一个对象去增加则不会出现。
当你用data在进行数据的遍历的时候:foreach(){} ,却在遍历中进行data的保存,当然会出错啦。相当于data同时在遍历和保存。
就会提示你线程的并发。把data.savechanges()写在foreach外边就行,或者像楼上说的,再建一个Entities的对象进行data2.savechanges()的保存就行了。