财产不直接加载EF6

时间:2018-03-05 19:06:20

标签: c# asp.net entity-framework linq entity-framework-6

我有一个Request类,其中包含CreatedBy类型的属性ApplicationUser

然后,我需要做一些授权,以查看当前用户是否可以访问该请求,如下所示:

public bool HasAccessToRequest(Request req)
{
    var user = GetCurrentUser();

    if (req == null)
    {
        return false;
    }

    if (req.CreatedBy.Department.Managers.Any(x => x.Id == user.Id))
    {
        return true;
    }

    return false;

}

GetCurrentUser()只是将当前登录的用户作为对象。

问题是,当我这样做时,我收到一个错误:

  

“对象引用未设置为对象的实例”

这可以通过逐步执行这段代码来验证,我注意到,当断点时,CreatedBy确实没有被加载。然后我查看我的db表,那里有一个有效的值,所以我再试一次,但这次等待大约5秒,然后在悬停时,它神奇地出现在req参数中。

我没有使用任何类型的async方法,并且我在不同的控制器中使用相同的方法,这种方法完全正常。关于它可能是什么的任何指针?据我所知,没有其他代码在手边运行我需要等待,我只能看到这需要一段时间来加载而不设置断点并等待我得到上述错误。

首先发生这种情况:

然后在等待2-4秒后发生这种情况:

enter image description here

1 个答案:

答案 0 :(得分:0)

看起来我为CreatedBy禁用了延迟加载,因此制作它:

public virtual ApplicationUser CreatedBy { get; set; }

似乎解决了这个问题。这有点令人困惑,因为我在这个项目的开发过程中已经过了一半,而且这个领域以前从未需要虚拟化并完全正常工作,我不确定它是否会导致潜在的问题以后。

相关问题