我有一个Silverlight 4应用程序,它使用WCF RIA服务从数据库中提取实体。这些数据对象相当简单,只有几个字段,但其中一个字段包含任意大小的二进制数据。应用程序需要在用户登录后基本上尽快访问此数据,在列表中显示,启用选择等。
我的问题是因为这些数据的大小,加载时间是不可接受的,并且可以接近RIA服务的默认超时。
我想以某种方式将对象部分加载到我的本地数据上下文中,以便我拥有ID,名称等但不包含二进制数据。然后我可以在稍后(即实际需要时)填充我需要显示的那些对象的二进制字段。
欢迎任何关于如何实现这一目标的建议。
我在写这个问题时遇到的另一种方法(这种情况多久发生一次?!)是我可以将二进制数据移动到一个单独的数据库表中,该数据库表连接到原始记录1:1,这将允许我制作使用RIA对该二进制数据的延迟加载。
再次..评论欢迎!感谢。
答案 0 :(得分:5)
请勿更改数据库。更改您的交付方式。
为您的快速项目列表创建单独的WCF RIA服务,并使用POCO(普通旧clr对象)向下发送所需数据的摘要。然后,当你为大家伙做好准备时,你可以从POCO的数据中一次下载一个。
Brad Abrams和Nikhil 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