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

San*_*r_V 6 changeset wcf-ria-services 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
    }
Run Code Online (Sandbox Code Playgroud)

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

或者也许任何人都知道更好的方法来检查更新期间对象的某个属性是否已更改?我当然可以将它与数据库中的值进行比较,但似乎我应该避免对数据库的额外调用.

任何帮助再次非常感谢:-)

编辑:刚刚发现RoundTripOriginalAttribute.这似乎可以解决问题.我是唯一一个认为RIA可以记录得更好的方式吗?

Jpo*_*las 3

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

\n\n

我对此还是有一些疑虑,所以请教了一些高手:

\n\n

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

\n\n

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

\n\n

希望这可以帮助。

\n