Linq 查询引用了不同的上下文,但实际上并非如此
Linq queries references different contexts but actually it is not
我正在尝试使用 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();
}
}
这是我的 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;
}
}
确切错误是:
The specified LINQ expression contains references to queries that are associated with different contexts.
这不是重复的,我看到了其他问题,这些用户实际上正在尝试不同的上下文,但就我而言,我有一个。
问题出在你的惰性实例化上。应该是
private ApplicationDbContext _dbContext;
public ApplicationDbContext DbContext
{
get
{
if(_dbContext==null){_dbContext=ApplicationDbContext.Create();}
return _dbContext;
}
}
编辑:使用 Lazy 的示例
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;
}
}
试试这个
您的 属性 每次访问时都会 return 一个新的上下文。
您需要存储新创建的上下文,以便下次使用时可以 returned。
我正在尝试使用 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();
}
}
这是我的 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;
}
}
确切错误是:
The specified LINQ expression contains references to queries that are associated with different contexts.
这不是重复的,我看到了其他问题,这些用户实际上正在尝试不同的上下文,但就我而言,我有一个。
问题出在你的惰性实例化上。应该是
private ApplicationDbContext _dbContext;
public ApplicationDbContext DbContext
{
get
{
if(_dbContext==null){_dbContext=ApplicationDbContext.Create();}
return _dbContext;
}
}
编辑:使用 Lazy 的示例
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;
}
}
试试这个
您的 属性 每次访问时都会 return 一个新的上下文。 您需要存储新创建的上下文,以便下次使用时可以 returned。