2010-04-16 11 views
5

Tengo una aplicación Silverlight 4 que extrae entidades de una base de datos utilizando los servicios WCF RIA. Estos objetos de datos son bastante simples, solo unos pocos campos, pero uno de esos campos contiene datos binarios de un tamaño arbitrario. La aplicación necesita acceder a estos datos básicamente lo antes posible después de que un usuario haya iniciado sesión, para mostrar en una lista, habilitar la selección, etc.carga y administración parcial de entidades en silverlight/wcf ria

Mi problema es debido al tamaño de estos datos, los tiempos de carga no son aceptables y pueden acercarse el tiempo de espera predeterminado del servicio RIA.

Me gustaría de alguna manera cargar parcialmente los objetos en mi contexto de datos local para que tenga los ID, nombres, etc., pero no los datos binarios. Luego, podría en un momento posterior (es decir, cuando realmente se necesita) poblar los campos binarios de esos objetos que necesito mostrar.

Cualquier sugerencia sobre cómo lograr esto sería bienvenida.

Otro enfoque que se me ha ocurrido al escribir esta pregunta (¿con qué frecuencia sucede esto ?!) es que podría mover los datos binarios a una tabla separada de la base de datos unida al registro original 1: 1 que me permitiera hacer uso de la carga lenta de RIA en esos datos binarios.

nuevamente ... ¡comentarios bienvenidos! Gracias.

Respuesta

5

No cambie su base de datos. Cambia tu método de entrega.

Cree un Servicio WCF RIA separado para su lista rápida de elementos y use un POCO (objeto simple antiguo clr) para enviar un resumen de los datos que necesita. Luego, cuando esté listo para el hombre grande, puede descargar de uno en uno los datos de su POCO.

Brad Abrams y Nikhil Kothari han hablado sobre el uso de POCO por un tiempo. Mire sus discursos de MIX para más información.

crear un nuevo servicio para sus elementos de la lista rápidas:

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

Su POCO es simplemente un objeto en el servidor, así:

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

Buena suerte!

p.s. La aplicación BookClub de Nikhil hace esto mucho. Si necesita ver una aplicación real haciendo esto, descargue su aplicación: http://www.nikhilk.net/Content/Presentations/MIX10/BookClub.zip

Cuestiones relacionadas