2012-04-20 24 views
0
class Profile { string name; Book[] books} 

class Book { string name } 

两个不同的配置文件(A和B)都与同一本书有关系。RIA在Silverlight中创建两次相同的实例

当我使用WCF/RIA从Silverlight逐个加载配置文件。我最终得到了两个同名的书对象。 (同一本书!)。我希望RIA检测到该书已经存在于Silverlight中,并使用现有的实例而不是第二次创建它。

他们是POCO(复杂对象 - 不在数据库中)。

如何告诉RIA名称是唯一的,并且在Silverlight(RIA客户端)中不能有两个具有相同名称的实例?

UPDATE 由于问我已经实现了一个解决方法 - 我不认为它是一个优雅的解决方案,但!但这里是: GetProfile上的回调方法被遍历所有profile.books的方法所取代,并检查每本书是否已存在于本地Dictionary中。如果图书在本地存在,则使用本地图书并删除第二个图书。如果它没有被添加到字典中并被使用。

解决方案 我创建了自己的Book-class clientside,然后将RIA创建的bookss转换为我自己的book-type。当我将更新后的图书发送回服务器时,我创建了RIA图书的实例,在更新任何属性之前,我会在之后调用OnDeserializing()和OnDesriallized()。这允许我编辑RIA-Book。

+0

我假设您使用2个独立的DomainContext实例来获取每本配置文件的书籍?这将导致相同Book对象的两个不同实例。你能发布更多的代码吗? – 2012-04-20 08:37:21

+0

AFAIK如果你的其中一个属性是一个关键字,比如数据库端的主键。 EntityFramework管理它。你能检查你的关键属性edmx文件,和domainService类的属性。 – 2012-04-20 11:19:12

+0

@DavutGürbüz这不是实体。书本对象是在服务器端创建的(基于第三方API)。我曾尝试将[Key]属性添加到Name属性中。导致自动生成的Profile类不再具有books属性。 – jenspo 2012-04-20 11:52:40

回答

0

SOLUTION 上GetProfile回调方法被替换遍历所有profile.books并检查每本书在本地字典已经存在的方法。如果图书在本地存在,则使用本地图书并删除第二个图书。如果它没有被添加到字典中并被使用。

我创建了自己的Book-class clientside,然后将RIA创建的bookss转换为我自己的book-type。当我将更新后的图书发送回服务器时,我创建了RIA图书的实例,在更新任何属性(如FavouriteBook)之前,我在之后调用OnDeserializing()和OnDesriallized()。这允许我编辑RIA-Book。

相关问题