我在一個項目中使用LINQ to Entity,在這裏我從數據庫中拉出一堆數據並將其組織成一堆對象並將其保存到數據庫中。在使用LINQ to Entity之前,我沒有遇到寫入db的問題,但我遇到了這個問題。這是我得到的錯誤(這是「的InnerException」,除了本身是沒用!):LINQ的問題(到實體)[添加記錄]
新的事物是不允許的,因爲 有在 會話中運行其他線程。
我已經看到,之前,當我試圖保存我的更改內循環。在這種情況下,循環結束,並試圖進行該調用,只是爲了給我例外。下面是當前的代碼:
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,但這是爲了不同的話題:))
任何想法可能會導致這種情況?
謝謝!
編輯:感謝您更新標籤!
1)你的應用是多線程的嗎? 2)dbRMI的範圍是什麼?它夠新鮮嗎? – Henri 2010-04-02 19:09:17
1)我沒有做多線程,所以我會說它不是。 2)dbMRI具有控制器的全局範圍。 3)我不確定你的意思是新鮮的... – SlackerCoder 2010-04-02 20:51:02