Linq查询引用了不同的上下文,但实际上并非如此

Ehs*_*jad 0 c# linq entity-framework asp.net-mvc-5 asp.net-identity-2

我试图使用EF 6从两个不同的表中获取数据,它是一个asp.net mvc 5项目,其中使用了Identity 2.0,但是当我加入两个表时,我得到两个实体的上下文不同的错误,但它不是,这是我的代码:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection", throwIfV1Schema: false)
    {
    }

    public DbSet<UserAccountStatus> UserAccountStatuss { get; set;}

    public static ApplicationDbContext Create()
    {
       return new ApplicationDbContext();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的linq查询:

var result = (from user in DbContext.Users
              join accountStatus in DbContext.UserAccountStatuss on user.Id equals accountStatus.UserId
              where user.Email == email
              select accountStatus.AccountEnabled).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

我的DbContext属性:

public ApplicationDbContext DbContext
{
    get
    {
        return _dbContext ?? ApplicationDbContext.Create();
    }
    private set
    {
        _dbContext = value;
    }

}
Run Code Online (Sandbox Code Playgroud)

确切的错误是:

指定的LINQ表达式包含对与不同上下文关联的查询的引用.

这不是重复,我已经看到其他问题,在那些用户实际上尝试不同的上下文,但在我的情况下,我有一个.

Ben*_*min 6

你懒惰的instantiaiton是问题.它应该是

private ApplicationDbContext _dbContext;
public ApplicationDbContext DbContext
{
    get
    {
        if(_dbContext==null){_dbContext=ApplicationDbContext.Create();}
        return _dbContext;
    }


}
Run Code Online (Sandbox Code Playgroud)

编辑:使用Lazy的示例

private Lazy<ApplicationDbContext> _dbContext=new Lazy<ApplicationDbContext>(()=>ApplicationDbContext.Create());
public ApplicationDbContext DbContext
{
    get
    {
        return _dbContext.Value;
    }


}
Run Code Online (Sandbox Code Playgroud)