没有Include的LINQ返回null

时间:2015-03-18 13:39:44

标签: c# asp.net-mvc linq asp.net-identity

为什么没有Inlcude的LINQ返回null以引用另一个模型?

模型

public class ApplicationUser : IdentityUser
{
    public FilePath FilePath { get; set; }
    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
    {
        var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
        return userIdentity;
    }

}

public class FilePath
{
    public int FilePathId { get; set; }
    [StringLength(255)]
    public string FileName { get; set; }
    public FileType FileType { get; set; }
}

public enum FileType
{
    Avatar = 1, 
    Photo = 2,
    Study = 3
}

控制器

private ApplicationDbContext db = new ApplicationDbContext();

public ActionResult Details(string id)
{
    //...

    ApplicationUser appUser1 = db.Users.Find(id);
    ApplicationUser appUser2 = db.Users.Include(i => i.FilePath).SingleOrDefault(i => i.Id == id);
    if(appUser1.FilePath == null); //null
    if(appUser2.FilePath == null); //not null, has all data
    return View(appUser2);
}

1 个答案:

答案 0 :(得分:2)

您应该将FilePath属性标记为virtual,以使延迟加载工作:

public virtual FilePath FilePath { get; set; }

顺便说一句:您的问题应更改为“实体框架”,不包含“返回”空白&#39;。

实体框架!= LINQ 。 LINQ是一个更高级别的概念,而Entity Framework只是实现了LINQ提供程序,因此您可以使用linq语法查询数据库。