假设我有 3 个从 EF 生成的实体,例如 tab1、tab2 和 tab3。在 SL 应用程序中,我调用 SubmitChanges 将数据保存到 DB,所有更改将由 WCF 和 EF 自动处理。
问题是:如何知道数据库中更新操作的顺序?
我需要知道这一点,因为我在这些表上有触发器并且需要知道更新的顺序。
假设我有 3 个从 EF 生成的实体,例如 tab1、tab2 和 tab3。在 SL 应用程序中,我调用 SubmitChanges 将数据保存到 DB,所有更改将由 WCF 和 EF 自动处理。
问题是:如何知道数据库中更新操作的顺序?
我需要知道这一点,因为我在这些表上有触发器并且需要知道更新的顺序。
您可以做的一件事是覆盖您的 DomainService 中的 PeristChangeSet() 并手动控制保存的顺序。在您的常规更新/插入语句中什么都不做。这是一些用于保存文档示例的伪代码来解释我的答案:
[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;
}