簡體   English   中英

Linq查詢引用不同的上下文,但實際上不是

[英]Linq queries references different contexts but actually it is not

我正在嘗試使用EF 6從兩個不同的表中獲取數據,這是一個使用了Identity 2.0的asp.net mvc 5項目,但是當我加入兩個表時,出現了兩個實體的上下文不同的錯誤,但是不是,這是我的代碼:

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

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

    public static ApplicationDbContext Create()
    {
       return new ApplicationDbContext();
    }
}

這是我的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();

我的DbContext屬性:

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

}

確切的錯誤是:

指定的LINQ表達式包含對與不同上下文關聯的查詢的引用。

這不是重復的,我看過其他問題,在那些用戶實際上嘗試不同的上下文的情況下,但就我而言,我有一個問題。

你的懶惰實例化就是問題所在。 它應該是

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


}

編輯:懶惰的例子

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


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

}

每次您都會獲得新的環境...

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

嘗試這個

您的媒體資源每次訪問都會返回一個新的上下文。 您需要存儲新創建的上下文,以便下次使用它時可以將其返回。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM