0

我正在尝试从外键引用中检索用户对象,但每次我尝试这样做时都没有返回任何内容......

我的桌子是这样设置的:

  FBUserID long,
  UserID uniqueidentifier

所以我让我的存储库在提供 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;
    }

我检查了传入的 uid (FBUserID) 是否正确,我检查了 UserID 是否与 FBUserID 匹配。而且我还检查以确保fbUids.Count() > 0...

我已经返回fbUids.FirstOrDefault().FBUserID并获得了正确的 FBUserID,但是任何时候我尝试返回aspnet_Usersoraspnet_Users.UserName等​​......我都没有得到任何返回。(我猜由于某种原因它会出错)

我没有正确设置调试,所以这可能就是我遇到这么多麻烦的原因......但到目前为止,我所做的所有检查我一直在做return this.Json(/* stuff returned form the repository */),以便我可以在它恢复时发出警报的JavaScript。

任何人都知道为什么我很难从这样的外键关系中检索用户对象吗?

或者您对找出问题所在有什么建议吗?

4

2 回答 2

0

目前,使用 Entity Framework 1,您不会自动延迟加载,例如,如果您想从一个实体遍历到下一个实体,您需要.Include("OtherEntity")在您的选择上执行以将这些实体包含在查询中,或者您需要显式调用.Load("OtherEntity")您的 EntityContext 以加载该实体。

这是 EF 团队的设计决定,不支持自动延迟加载,因为他们认为这太危险了;他们想让用户清楚明白地表明他还包含/加载了第二组实体。

由于受欢迎的需求,即将推出的 EF v4(将在 2009 年底的某个时候与 .NET 4.0 一起发布)将支持自动延迟加载 - 如果您希望使用它。您需要显式启用它,因为它默认关闭:

context.ContextOptions.DeferredLoadingEnabled = true;

请参阅有关该新功能的一些文章:

于 2009-08-04T07:00:38.850 回答
0

不知道这是否是您要问的,但我这样做是这样的;

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

这有帮助还是我不在基地?

于 2009-08-04T02:47:36.163 回答