EF并发问题,在提供程序连接上启动事务时出错。有关详细信息,请参阅内部异常。

hu_service 2013-11-21 03:03:53

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(); //此处抛异常 在提供程序连接上启动事务时出错。有关详细信息,请参阅内部异常。
}
}
...全文
1074 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Joson.e8love 2015-10-28
  • 打赏
  • 举报
回复
用上了,后来人都看见下吧 遍历 中 data.SaveChanges();  一定要 tolist
herttfly 2015-01-06
  • 打赏
  • 举报
回复
第10行大括号后加 .ToList() 就好了。 纠结了半天才想明白,留给后人吧。
woheniyiyang444 2014-05-20
  • 打赏
  • 举报
回复
当你用data在进行数据的遍历的时候:foreach(){} ,却在遍历中进行data的保存,当然会出错啦。相当于data同时在遍历和保存。 就会提示你线程的并发。把data.savechanges()写在foreach外边就行,或者像楼上说的,再建一个Entities的对象进行data2.savechanges()的保存就行了。
hu_service 2013-11-21
  • 打赏
  • 举报
回复
引用 1 楼 rui_china 的回复:
没看懂你的事物在那启动的?
这样的操作还需要启用事务么? 判断是因为在增加数据的同时读取操作还在进行,所以抛异常。Entities data=new Entities();如果在new一个对象去增加则不会出现。
灬浪子灬 2013-11-21
  • 打赏
  • 举报
回复
没看懂你的事物在那启动的?

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧