我有一个相当简单的问题,似乎无法找到答案。我有一个与Ria Services合作的Silverlight应用程序。在DomainService类中,我有一个如下的更新方法:

public void UpdateConversationState(ConversationState currentConversationState)
    {
        var original = ChangeSet.GetOriginal(currentConversationState);
        if (original != null)
            ObjectContext.ConversationStatesRepository.AttachAsModified(currentConversationState, original);
        else
            ObjectContext.ConversationStatesRepository.Attach(currentConversationState);
        currentConversationState.UpdDat = DateTime.Now;
        if(original.Name != currentConversationState.Name)
            //Do something extra
    }

问题在于Name属性始终为空。实际上,除ID以外的每个字段都有默认值。我尝试搜索GetOriginal方法的工作方式,但是找不到任何帮助。看起来好像它试图根据从客户端发送回服务器的更改尝试在服务器上重建原始对象。

或者,也许有人知道一种更好的方法来检查对象的某些属性在更新过程中是否已更改?我当然可以将它与数据库中的值进行比较,但似乎我应该避免对此数据库进行额外的调用。

任何帮助再次表示赞赏:-)

编辑:
刚刚发现了RoundTripOriginalAttribute。这似乎可以解决问题。我是唯一认为RIA可以被更好地记录的人吗?

最佳答案

好吧,我也一直在寻找一种使用EF4跟踪实体更改的方法,经过一番谷歌搜索之后,我发现您需要将“RoundTripOriginal”属性应用于要跟踪的实体的属性,因为RIA(默认情况下, )不会将原始值发送回服务器。

我对此仍然有些担忧,我问了一些专家:

http://forums.silverlight.net/forums/t/218332.aspx

这对我有用,但我仍然认为这不是最好的出路。

希望这可以帮助。

关于wcf-ria-services - WCF Ria服务ChangeSet.GetOriginal(): How does it work?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3940108/

10-12 07:21