RIA服务类对象未更新

时间:2011-06-28 14:30:50

标签: c# asp.net silverlight

在我的silverlight项目中,我正在使用RIA DomainDataService从asp.net项目中获取对象。

public class MyObject
{
[Key]
public int Id{get;set;}
public double XValue {get;set;}
}

这是RIA服务中的静态对象 - 其范围是类级别。

private static List<MyObject> Models = new List<MyObject>();

在asp.net项目中,我在Models中插入对象并在silverlight端获取它。稍后,我必须修改静态列表中的对象,但List始终返回相同的对象,而不是对象的修改版本。

我修改了对象,例如:

Models[0].XValue = 0.1;

在RIA服务上,我可以看到正在修改的列表。然后,服务方法返回此对象,但silverlight获取相同的旧List而不是修改后的List。

似乎RIA服务将对象保留在内存中,只返回相同的对象。

如何编辑自定义类“MyObject”的属性值,以便Silverlight前端可以获取修改后的列表?我是否需要使MyObject可编辑?请指导。

找到解决方案。如果我曾帮助过任何人,请回答以下问题: - )

2 个答案:

答案 0 :(得分:0)

RIA构建为使用数据库来存储对象 - 如果您不使用数据库,则可以使用标准WCF服务并返回List&lt;&gt;通过那个。

答案 1 :(得分:0)

如果对象的Key属性相同,RIA服务将不会修改客户端上的对象。即使我们修改了对象的其他属性,也不会被拾取。如果我们从RIA服务向客户端Silverlight应用程序发送一个List,那么我们必须在修改它之后为该对象的Key属性设置一个新值,以便刷新它并且silverlight可以获得更新的更新。

因此,

Create a public Guid UniqueID property in your XYZ class

Add [Key] attribute to it

When creating an object set its
value to Guid.NewGuid()

When updating an object, set its
value to Guid.NewValue()

如果要更新列表的所有Guid值,则可以使用匿名方法:

MyList.Select(c => { c.UniqueID = Guid.NewGuid(); return c; }).ToList();

希望有所帮助