如何通过外键选择对象

时间:2009-08-04 03:30:50

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

如果我有一个包含主键(AccLinkID)和外键(aspnet_Users UserID)的表,如何使用Linq to Entities选择外键指向的对象。

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

没有用......

有人有什么想法吗?

3 个答案:

答案 0 :(得分:1)

试试这个:

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

答案 1 :(得分:1)

虽然可以使用Include来解决这个问题,正如其他人所建议的那样,但这并不是我怎么做的。相反,我投射,从不要求包括:

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

在这种情况下,用户会自动加载。

答案 2 :(得分:0)

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

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

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

context.ContextOptions.DeferredLoadingEnabled = true;

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