[英]The LINQ expression contains references to queries that are associated with different contexts
[英]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.