Pregunta

Si tengo una tabla con una clave primaria (AccLinkID) y una clave externa (aspnet_Users UserID), ¿cómo puedo seleccionar el objeto al que apunta la clave externa usando Linq to Entities?

User myUser = _myDB.AccLinkSet.Where(user => user.LinkID == linkId).FirstOrDefault().aspnet_Users;

no funcionó ...

¿Alguien tiene alguna idea?

¿Fue útil?

Solución

Prueba esto:

User myUser = _myDB.AccLinkSet.Include("aspnet_Users")
    .Where(user => user.LinkID == linkId).FirstOrDefault().aspnet_Users;

Otros consejos

Aunque puede resolver esto con Incluir, como han sugerido otros, no es así como lo haría. En cambio, proyectaría, lo que nunca requiere Incluir:

var q = from al in yDB.AccLinkSet
        where al.LinkID == linkId
        select al.aspnet_Users;

En este caso, los usuarios se cargan automáticamente.

Por ahora, con Entity Framework 1, no obtienes una carga retrasada automática, p. si desea desplazarse de una entidad a la siguiente, debe hacer un .Include (" OtherEntity ") en su selección para incluir esas entidades en la consulta, o debe llamar explícitamente .Load (" OtherEntity ") en su EntityContext para cargar esa entidad.

Esta fue una decisión de diseño del equipo de EF de no admitir la carga diferida automática, ya que consideraban que era demasiado peligroso; querían dejar claro y obvio para el usuario que también está incluyendo / cargando un segundo conjunto de entidades.

Debido a la gran demanda popular, el próximo EF v4 (que se lanzará con .NET 4.0 en algún momento hacia finales de 2009) admitirá la carga retrasada automática, si desea utilizarlo. Debe habilitarlo explícitamente, ya que está desactivado de forma predeterminada:

context.ContextOptions.DeferredLoadingEnabled = true;

Vea algunos artículos sobre esa nueva característica:

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top