que es posible cargar con ganas:
var q = from p in Context.Products
.Include("ModifiedByUser")
.Include("Category")
select p;
... o proyecto:
var q = from p in Context.Products
select new
{
Id = p.Id,
Name = p.Name
ModifiedByUserName = p.ModifiedByUser.Name,
CategoryName = p.Category.Name
}
La ventaja de la proyección es que se consigue sólo los datos que necesita, no la totalidad de cada entidad de referencia. La ventaja de la carga ansiosa es que las entidades devueltas cambian de seguimiento. Elija la técnica correcta para el problema en cuestión.
actualización
Sí, es importante mencionar que está utilizando Servicios RIA. Supongo que también estás trabajando dentro del cliente. Esto hace que las cosas sean completamente diferentes.
En Servicios de RIA, es muy importante asegurarse de devolver todo el gráfico de las entidades que necesita en la carga inicial. No desea llamar a nada como .Load() en una entidad, porque eso sería otra candente para el servidor, lo que es malo para el rendimiento. Si está en, por ejemplo, un cliente de Silverlight y solicita una lista de instancias del servidor y sus propiedades relacionadas no están ya materializadas, ya es demasiado tarde. Además, Include no funcionará dentro de un cliente de Silverlight. Por lo tanto, RIA Services tiene herramientas del lado del servidor que puede usar para asegurarse de devolver inicialmente el gráfico de objetos correcto y totalmente materializado.
En su lugar, lo que necesita hacer es utilizar IncludeAttribute dentro de su servidor de servicios de RIA. Puede crear una clase de metadatos "amigo" para decorar su modelo de entidad con [Incluir]. Hay ejemplos en the RIA Services overview document, section 4.8.
Aquí hay un ejemplo de cómo estoy cargando los datos: Quizás debería haber mencionado que estoy codificando esto para una aplicación Silverlight. Y esto es a través de un servicio de dominio. RTIPricingContext _context = new RTIPricingContext(); LoadOperation op = _context.Load (context.GetPurchaseOrderQuery(), PurchaseOrdersLoadedCallback, null); private void PurchaseOrdersLoadedCallback (LoadOperation lo) { IEnumerable po = lo.Entities.Where (w => w.UserID == SelectedUser.ID); // Esta es la colección en la que necesito llenar las subclases. –
Jukeman