No se puede recuperar el objeto de usuario de las relaciones de clave externa utilizando la instrucción Linq to Entities

StackOverflow https://stackoverflow.com/questions/1225520

Pregunta

Estoy tratando de recuperar un objeto de usuario de una referencia de clave externa, pero cada vez que intento hacerlo, no se devuelve nada ...

Mi tabla está configurada así:

  FBUserID long,
  UserID uniqueidentifier

así que mi repositorio intenta obtener el Usuario cuando se le proporciona el FBUserID:

    public User getUserByFBuid(long uid)
    {
        User fbUser = null;
        IEnumerable<FBuid> fbUids = _myEntitiesDB.FBuidSet.Where(user => user.FBUserID == uid);

        fbUser = fbUids.FirstOrDefault().aspnet_Users;

        return fbUser;
    }

Verifiqué que el uid (FBUserID) pasado es correcto, verifiqué que el UserID coincida con el FBUserID. Y también he comprobado para asegurarme de que fbUids.Count () > 0 ...

He devuelto fbUids.FirstOrDefault (). FBUserID y he obtenido el FBUserID correcto, pero cada vez que intento devolver el aspnet_Users o aspnet_Users.UserName , etc. No recibo nada devuelto. (Supongo que está recibiendo un error por alguna razón)

No tengo la depuración configurada correctamente, así que probablemente sea por eso que tengo tantos problemas ... pero hasta ahora, todas las comprobaciones que he hecho devuelven esto. Json (/ * cosas devueltas del repositorio * /) para que pueda hacer una alerta cuando vuelva al javascript.

¿Alguien sabe por qué tendría problemas para recuperar el objeto de usuario de una relación de clave externa como esa?

¿O tiene alguna sugerencia para averiguar qué sucede?

¿Fue útil?

Solución

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:

Otros consejos

No sé si esto es lo que estás preguntando, pero hago una unión así;

var votes = from av in dc.ArticleVotes
  join v in dc.Votes on av.voteId equals v.id
  where av.articleId == articleId
  select v;

¿Esto ayudó o estoy fuera de lugar?

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