我在一个项目中使用linq to实体,在这个项目中,我从数据库中提取一组数据,并将其组织成一组对象,然后将它们保存到数据库中。在使用linq to实体之前,我没有遇到向数据库写入数据的问题,但是我遇到了这个特殊的问题。这是我得到的错误(这是“innerException”,异常本身是无用的!):
不允许新事务,因为
有其他线程正在运行
会话。
我以前看到过,当我试图在一个循环中保存我的更改时。在这种情况下,循环结束,它试图进行该调用,但只给出异常。以下是当前代码:
try
{
//finalResult is a list of the keys to match on for the records being pulled
foreach (int i in finalResult)
{
var queryEff = (from eff in dbMRI.MemberEligibility
where eff.Member_Key == i && eff.EffDate >= DateTime.Now
select eff.EffDate).Min();
if (queryEff != null)
{
//Add a record to the Process table
Process prRecord = new Process();
prRecord.GroupData = qa;
prRecord.Member_Key = i;
prRecord.ProcessDate = DateTime.Now;
prRecord.RecordType = "F";
prRecord.UsernameMarkedBy = "Autocard";
prRecord.GroupsId = qa.GroupsID;
prRecord.Quantity = 2;
prRecord.EffectiveDate = queryEff;
dbMRI.AddObject("Process", prRecord);
}
}
dbMRI.SaveChanges(); //<-- Crashes here
foreach (int i in finalResult)
{
var queryProc = from pro in dbMRI.Process
where pro.Member_Key == i && pro.UsernameMarkedBy == "Autocard"
select pro;
foreach (var qp in queryProc)
{
Audit aud = new Audit();
aud.Member_Key = i;
aud.ProcessId = qp.ProcessId;
aud.MarkDate = DateTime.Now;
aud.MarkedByUsername = "Autocard";
aud.GroupData = qa;
dbMRI.AddObject("Audit", aud);
}
}
dbMRI.SaveChanges(); //<-- AND here (if the first one is commented out)
}
catch (Exception e)
{
//Do Something here
}
基本上,我需要它插入一条记录,获取插入的记录的标识,并将一条记录插入到另一个表中,其中标识来自第一条记录。考虑到其他一些限制,不可能在两者之间创建FK关系(我已经尝试过了,但应用程序的其他部分不允许这样做,我的DBA团队出于任何原因讨厌FK,但这是另一个主题:)
你知道这可能是什么原因吗?
谢谢!
编辑:感谢您更新标签!