gpt4 book ai didi

entity-framework - Entity Framework ,已经有一个与此连接关联的打开的 DataReader 必须先关闭

转载 作者:行者123 更新时间:2023-12-04 11:56:13 26 4
gpt4 key购买 nike

在“each”中,当运行“FirstOrDefault”时会报错“已经有一个与此连接关联的打开的DataReader,必须先关闭它。”。
怎么做 ?

public int SetUser(string[] dIds, string pId)
{
using (var scope = _dbContextScopeFactory.Create())
{
var db = scope.DbContexts.Get<JuCheapContext>();

var users = db.Users;

var user = users.FirstOrDefault(m => m.Id == pId);
if (user.Places == null)
{
user.Places = new List<PlaceEntity>();
}

var place = db.Place.Include(m => m.User).Where(m => dIds.Contains(m.Id));

place.Each(m =>
{
user.Places.Add(m);

//There is already an open DataReader associated with this Connection which must be closed first.
var pu = users.FirstOrDefault(u => u.LoginName == m.Key);

if (pu != null)
{
pu.FId = pId;
}

});

return db.SaveChanges();
}
}

最佳答案

当你说

place.Each(m =>

您正在使用阅读器来迭代数据库中的项目

然后
  var pu = users.FirstOrDefault(u => u.LoginName == m.Key);

第二个读取器进入,而第一个读取器仍在执行中并发生错误

调用 ToList() 将数据放入内存并关闭读取器
var place = db.Place.Include(m => m.User).Where(m => dIds.Contains(m.Id)).ToList();

您还可以启用 MARS(多个事件结果集)

https://msdn.microsoft.com/en-us/library/h32h3abf(v=vs.110).aspx

关于entity-framework - Entity Framework ,已经有一个与此连接关联的打开的 DataReader 必须先关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43264526/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com