2010-04-06 4 views
1

많은 피드 처리를 수행하는 작은 응용 프로그램을 작성하고 있습니다. 속도가 문제가 아니므로 LINQ EF를 사용하고 싶습니다. 단일 사용자 응용 프로그램이므로 결국 한 달에 한 번만 사용됩니다.ADO.NET Entity Framework로 대량 삽입 및 업데이트

내 질문은 LINQ EF를 사용하여 대량 삽입을 수행하는 가장 좋은 방법을 중심으로 이루어집니다.

들어오는 데이터 스트림을 구문 분석 한 후에는 값 목록으로 끝납니다. 최종 사용자가 일부 중복 데이터를 가져 오기 때문에 결국 모든 레코드를 읽지 않고 for 루프를 수행하고 레코드를 거부 한 다음 나머지를 마지막으로 가져 오는 대신 삽입하는 동안 데이터를 "정리"하고 싶습니다.

System.Data.UpdateException was unhandled
Message="Unable to update the EntitySet 'ImportDoorAccess' because it has a DefiningQuery and no element exists in the element to support the current operation."
Source="System.Data.SqlServerCe.Entity"

내가 잘못 뭐하는 거지 :

DateTime minDate = dataTransferObject.Min(c => c.DoorOpen); 
DateTime maxDate = dataTransferObject.Max(c => c.DoorOpen); 

using (LabUseEntities myEntities = new LabUseEntities()) 
{ 
    var recCheck = myEntities.ImportDoorAccess.Where(a => a.DoorOpen >= minDate && a.DoorOpen <= maxDate).ToList(); 
    if (recCheck.Count > 0) 
    { 
     foreach (ImportDoorAccess ida in recCheck) 
     { 
      DoorAudit da = dataTransferObject.Where(a => a.DoorOpen == ida.DoorOpen && a.CardNumber == ida.CardNumber).First(); 
      if (da != null) 
       da.DoInsert = false; 
     } 
    } 

    ImportDoorAccess newIDA; 
    foreach (DoorAudit newDoorAudit in dataTransferObject) 
    { 
     if (newDoorAudit.DoInsert) 
     { 
      newIDA = new ImportDoorAccess 
      { 
       CardNumber = newDoorAudit.CardNumber, 
       Door = newDoorAudit.Door, 
       DoorOpen = newDoorAudit.DoorOpen, 
       Imported = newDoorAudit.Imported, 
       RawData = newDoorAudit.RawData, 
       UserName = newDoorAudit.UserName 
      }; 
      myEntities.AddToImportDoorAccess(newIDA); 
     } 
    } 
    myEntities.SaveChanges(); 
} 

나는이 오류가 무엇입니까 :

이것은 내가 현재 무엇을하고 무엇인가?

모든 안내를 환영합니다.

답변

2

이렇게 여러 번 삽입 할 수 있습니다.

모델 (EDMX)이 올바르게 설정되지 않은 경우 예외가 발생하는 것을 보았습니다. 해당 테이블에 기본 키 (EF 용어로 EntityKey)가 없거나 디자이너가 EntityKey가 무엇인지 추측하려했습니다. 후자의 경우 EDM 디자이너에서 두 개 이상의 속성이 옆에있는 키와 함께 표시됩니다.

ImportDoorAccess 테이블에 기본 키가 하나 있는지 확인하고 모델을 새로 고칩니다.

+0

챔피언처럼 작동합니다! 이 테이블은 가져 오기 테이블이므로 PK를 넣지 않았습니다. 이제 나는 내 모델을 되찾았고, 더 이상 오류가 없다! 감사. –

관련 문제