无法使用Linq to Entities语句从外键关系中检索用户对象

时间:2009-08-04 02:44:19

标签: sql-server asp.net-mvc linq-to-entities foreign-key-relationship

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

我的表格设置如下:

  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_Usersaspnet_Users.UserName等时......我都没有收到任何回复。 (我猜它出于某种原因会出错)

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

任何人都知道为什么我会从这样的外键关系中检索用户对象时遇到麻烦?

或者你有什么建议可以找出问题所在吗?

2 个答案:

答案 0 :(得分: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;

这有帮助还是我离开了?

答案 1 :(得分:0)

目前,使用Entity Framework 1,您无法获得自动延迟加载,例如如果要从一个实体遍历到下一个实体,则需要在select上执行.Include("OtherEntity")以在查询中包含这些实体,或者需要在EntityContext上显式调用.Load("OtherEntity")以加载那个实体。

这是EF团队的一项设计决定,不支持自动延迟加载,因为他们认为这太危险了;他们希望向用户说明他还包括/加载第二组实体。

由于受欢迎的需求很高,即将推出的EF v4(将于2009年底发布的.NET 4.0版本)将支持自动延迟加载 - 如果您希望使用它。您需要明确启用它,因为默认情况下它是关闭的:

context.ContextOptions.DeferredLoadingEnabled = true;

查看有关该新功能的一些文章: