프로젝트에서 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 관계를 생성 할 수는 없습니다 (하지만 시도한 적이 있지만 앱의 다른 부분에서는 허용되지 않으며 FK를 싫어하는 이유로 DBA 팀이 다른 주제 :))
어떤 아이디어가 원인 일 수 있습니까?
감사합니다.
편집 : 태그를 업데이트 해 주셔서 감사합니다.
1) 앱이 멀티 스레드입니까? 2) dbRMI의 범위는 무엇입니까? 충분히 신선합니까? – Henri
1) 멀티 스레드로 만들지 않았으므로 그렇지 않다고 말할 것입니다. 2) dbMRI에는 컨트롤러에 대한 전역 범위가 있습니다. 3) 당신이 신선한 것이 무엇을 의미하는지 모르겠습니다 ... – SlackerCoder