1

EF에서 생성 된 엔티티가 3 개 (예 : tab1, tab2 및 tab3)라고 가정합니다. SL 응용 프로그램에서 SubmitChanges를 호출하여 데이터를 DB에 저장하면 모든 변경 사항이 WCF 및 EF에 의해 자동으로 처리됩니다.도메인 컨텍스트를 사용하여 업데이트 순서를 확인하는 방법 SubmitChanges?

질문 : 데이터베이스에서 업데이트 작업의 순서를 어떻게 알 수 있습니까?

나는이 테이블에 트리거가 있고 업데이트 순서를 알아야하기 때문에이를 알아야합니다.

+0

: 여기에 내 대답을 설명하는 문서 exmmple를 저장하는 일부 의사입니다. .NET에서 트리거를 삭제하고 해당 코드를 다시 구현하는 것을 고려해야합니다. 우리는 컨텍스트에서 SaveChanges 메서드를 재정 의하여 거기에 트리거와 같은 논리를 실행합니다. – cadrell0

+0

고맙습니다. 레거시 시스템에서 트리거하고 많은 문제를 일으킬 수 있기 때문에 .NET 코드로 구현하고 싶지 않습니다. – KentZhou

+0

작동 순서는 내부 EF 작동 = 사용되는 작동 순서를 안정적으로 알 수 없습니다. –

답변

0

할 수있는 일은 DomainService에서 PeristChangeSet()을 재정의하고 수동으로 저장 순서를 제어하는 ​​것입니다. 정기적 인 업데이트/삽입 명령문에서는 아무 것도하지 않습니다. 트리거는 EF와 같은 개체를 수정하는 경우, 기회는 그들이 함께 좋은 재생되지 않습니다 있습니다

[Insert] 
public void InsertDocument(MyDocument objDocument) { } 

[Update] 
public void UpdateDocument(MyDocument objDocument) { } 


protected override bool PersistChangeSet() 
{ 
    try { 
     // have to save document first to get its id.... 
     MyDocument objDocumentBeingSaved = null; 
     foreach (ChangeSetEntry CSE in ChangeSet.ChangeSetEntries.Where(i => i.Entity is MyDocument)) { 
      var changedEntity = (MyDocument)CSE.Entity; 
      objDocumentBeingSaved = documentRepository.SaveDocument(changedEntity); 
      break; // only one doc 
     } 

     if (objDocumentBeingSaved == null) 
      throw new NullReferenceException("CreateDocumentDomainService.PersistChangeSet(): Error saving document information. Document is null in entity set."); 

     // save document assignments after saving document object 
     foreach (ChangeSetEntry CSE in ChangeSet.ChangeSetEntries.Where(i => i.Entity is DocumentAssignment)) { 
      var changedEntity = (DocumentAssignment)CSE.Entity; 
      changedEntity.DocumentId = objDocumentBeingSaved.Id; 
      changedEntity.Id = documentRepository.SaveDocumentAssignment(objDocumentBeingSaved, changedEntity); 
     } 

     // save line items after saving document assignments 
     foreach (ChangeSetEntry CSE in ChangeSet.ChangeSetEntries.Where(i => i.Entity is LineItem)) { 
      var changedEntity = (LineItem)CSE.Entity; 
      changedEntity.DocumentId = objDocumentBeingSaved.Id; 
      changedEntity.Id = documentRepository.SaveLineItem(objDocumentBeingSaved, changedEntity); 
     } 
     documentRepository.GenerateDocumentNumber(objDocumentBeingSaved.Id); 
    } 
    catch { 
     // .... 
     throw; 
    } 
    return false; 
} 
+0

감사합니다. 이런 종류의 하드 코드 솔루션은 내 상황에 매우 어렵습니다. DB에 많은 테이블이 있습니다 (submatchanges가있을 때마다 ChangeSet에 있습니다). EF SaveChanges는 변경 집합에있는 엔티티에 대해 일종의 순서를 사용해야합니다. 데이터베이스에 제출하기 전에 순서를 변경할 수 있습니까? – KentZhou