WCF Ria Services ChangeSet.GetOriginal():它是如何工作的?

时间:2010-10-15 06:55:36

标签: wcf-ria-services changeset domainservices

我有一个相当简单的问题,我似乎无法找到答案。我有一个带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可以记录得更好一点的方式吗?

1 个答案:

答案 0 :(得分:3)

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

我仍然对此有些担忧,我问了一些大师:

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

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

希望这有帮助。