6

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

4

1 回答 1

3

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

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

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

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

希望这可以帮助。

于 2011-02-11T20:08:32.770 回答