할 수있는 일은 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;
}
: 여기에 내 대답을 설명하는 문서 exmmple를 저장하는 일부 의사입니다. .NET에서 트리거를 삭제하고 해당 코드를 다시 구현하는 것을 고려해야합니다. 우리는 컨텍스트에서 SaveChanges 메서드를 재정 의하여 거기에 트리거와 같은 논리를 실행합니다. – cadrell0
고맙습니다. 레거시 시스템에서 트리거하고 많은 문제를 일으킬 수 있기 때문에 .NET 코드로 구현하고 싶지 않습니다. – KentZhou
작동 순서는 내부 EF 작동 = 사용되는 작동 순서를 안정적으로 알 수 없습니다. –