Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight 如何知道域上下文提交更改的更新顺序?_Silverlight_Entity Framework_Wcf Ria Services_Silverlight 5.0_Entity Framework 5 - Fatal编程技术网

Silverlight 如何知道域上下文提交更改的更新顺序?

Silverlight 如何知道域上下文提交更改的更新顺序?,silverlight,entity-framework,wcf-ria-services,silverlight-5.0,entity-framework-5,Silverlight,Entity Framework,Wcf Ria Services,Silverlight 5.0,Entity Framework 5,假设我有3个从EF生成的实体,比如tab1、tab2和tab3。在SL应用程序中,我调用SubmitChanges将数据保存到DB,所有更改都将由WCF和EF自动处理 问题是:如何知道数据库中更新操作的顺序 我需要知道这一点,因为我在这些表上有触发器,并且需要知道更新的顺序 您可以做的一件事是覆盖DomainService中的PeristChangeSet(),并手动控制保存顺序。只需在常规update/insert语句中不执行任何操作。下面是一些保存文档示例的伪代码,以解释我的答案: [Ins

假设我有3个从EF生成的实体,比如tab1、tab2和tab3。在SL应用程序中,我调用SubmitChanges将数据保存到DB,所有更改都将由WCF和EF自动处理

问题是:如何知道数据库中更新操作的顺序


我需要知道这一点,因为我在这些表上有触发器,并且需要知道更新的顺序

您可以做的一件事是覆盖DomainService中的PeristChangeSet(),并手动控制保存顺序。只需在常规update/insert语句中不执行任何操作。下面是一些保存文档示例的伪代码,以解释我的答案:

[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;
}

如果触发器正在修改与EF相同的实体,那么它们很可能无法很好地配合。您应该考虑删除触发器并在.NET中重新实现代码。我们在上下文中重写SaveChanges方法,并在那里运行类似触发器的逻辑。谢谢。从遗留系统触发,我不想在.NET代码中实现它,因为这会导致很多问题。操作顺序是内部EF行为=您无法可靠地知道将使用的操作顺序。@正如Ladislav所说,您确实无法知道使用的顺序。你最好的办法是在每次插入后调用SubmitChanges。我有一个类似的问题,我需要控制更新的执行顺序,但找不到任何答案。解决方法是使用单独的submitchange来按照我需要的顺序更新表。谢谢。这种硬代码解决方案对我的情况来说非常困难。数据库中有很多表(然后每次提交更改时都在变更集中)。当EF SaveChanges时,它应该对变更集中的那些实体使用某种顺序。在提交到数据库之前是否可以更改订单?