2010-04-16 57 views
5

我有一个Silverlight 4应用程序,它使用WCF RIA服务从数据库中拉取实体。这些数据对象非常简单,只有几个字段,但其中一个字段包含任意大小的二进制数据。应用程序需要访问此数据基本上在用户登录后,以显示在列表中,启用选择等访问silverlight/wcf ria中的部分实体加载和管理

我的问题是因为这个数据的大小,加载时间是不可接受的,可以接近RIA服务的默认超时。

我想以某种方式部分加载对象到我的本地数据上下文,以便我有ID,名称等,但不是二进制数据。然后,我可以在稍后(即实际需要时)填充需要显示的对象的二进制字段。

任何有关如何完成此任务的建议都会受到欢迎。

我在写这个问题时发生的另一种方法(发生这种情况的频率是多少?!)是我可以将二进制数据移动到一个单独的数据库表中,该数据库表以1:1的原始记录加入,这将允许我利用RIA对该二进制数据的延迟加载。

再次..评论欢迎!谢谢。

回答

5

不要更改您的数据库。更改您的送货方式。

为您的项目快速列表创建一个单独的WCF RIA服务,并使用POCO(普通旧clr对象)发送您所需数据的摘要。然后,当您为大家伙做好准备时,您可以从POCO的数据中随时下载一个。

Brad AbramsNikhil Kothari已经讨论了使用POCO一段时间。查看他们的MIX演讲,了解更多信息。

您的快速列表项创建新的服务:

public class QuickListService : LinqToEntitiesDomainService<MyEntities> 
{ 
    private IQueryable<QuickList> GetQuickList() 
    { 
     return from t in ObjectContext.Table 
       select new QuickList 
       { 
         ID = t.ID, 
        Title = t.Title 
       }; 
    } 
} 

你的POCO仅仅是服务器上的对象,像这样:

public class QuickList 
{ 
    public string Title; 
    public long ID; 
} 

祝你好运!

p.s. Nikhil的BookClub应用程序做了很多。如果你需要看到一个真正的应用程序这样做,下载他的应用程序:http://www.nikhilk.net/Content/Presentations/MIX10/BookClub.zip