在我的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可编辑?请指导。
找到解决方案。如果我曾帮助过任何人,请回答以下问题: - )
答案 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();
希望有所帮助