是否可以对服务器上的WCF RIA实体进行更改,将它们发送到客户端但不影响底层实体?

时间:2011-03-23 03:58:47

标签: silverlight wcf-ria-services

从阅读标题看起来似乎是一个奇怪的请求,所以让我澄清一下。

我在服务器上存储日期和时间以及他们的时区信息。我希望客户能够使用与所需时区匹配的参数来请求这些对象,并使用适当的数据接收对象。

所以说我有特定时间的预订表。几行可能看起来像

BookingId | When                    | TimeZone | Notes
        1 | 2011-05-06 12:00:00.000 | GMT +12  | null
        2 | 2011-05-06 08:00:00.000 | GMT +2   | null

客户端会调用类似GetBookings("Pacific Standard Time")的内容,结果实体将是上面的2个元组(可能没有时区字段),并调整其DateTimes,以便在客户端的时区中给出时间,没有附加时区/偏移信息。

我知道我可以在客户端上进行时区转换,但如果我有多个不同的客户端,我正在考虑在多个平台上复制这个(有些棘手的)代码,我不想这样做。

这里的问题是,如果服务器对这些实体(由EF支持)进行更改,则ObjectContext将跟踪更改。我确定这有一个简单的方法吗?

我到目前为止所考虑的最佳解决方案是我的预订对象的DTO,我宁愿避免,但必要时会实施。

感谢。

1 个答案:

答案 0 :(得分:1)

好吧,一种方法是你可以简单地创建该类类型的新对象,并将数据从“真实”对象复制到此对象并修改该对象的时间戳。在幕后你不应该把它添加到ObjectContext:p。如果您返回此对象,它将会很好,您可以获得结果。

更好的解决方案是为您的类创建部分类(Mindwell它应该在同一名称空间中)并创建一个计算属性。如果您使用Silverlight,请在属性上使用[DataMemberAttribute()],并使用所需的时区相应地填充您的信息。我觉得这很好。