使用Include时出现ObjectContext关闭错误
本文关键字:错误 ObjectContext Include 使用 | 更新日期: 2023-09-27 18:06:22
我试图为实体框架创建一个通用的Get方法,具有动态的Where
和Include
。我正在使用下面的代码,但是,当我尝试访问包含列表中的导航属性时,我得到了关于对象上下文关闭的错误
是不是.Include()
应该加载这些对象,所以我不需要保持ObjectContext打开?
public static List<T> GetList<T>(Func<T, bool> where, string[] includes)
where T : EntityObject
{
using (var context = new TContext())
{
ObjectQuery<T> q = context.CreateObjectSet<T>();
foreach (string navProperty in includes)
{
q.Include(navProperty);
}
return q.Where<T>(where).ToList();
}
}
导致错误的代码:
var x = DAL<MyContext>.GetList<MyEntity>(
p => p.Id == 1
, new string[]{ "Type" } );
var y = x.Type; // Throws an error that context has been closed
我觉得我一定是犯了什么愚蠢的错误,因为我是EF的新手,还在努力弄清楚。
您没有重新分配q
-这应该修复它:
foreach (string navProperty in includes)
{
q = q.Include(navProperty);
}
请记住,您使用的扩展方法每个都返回一个新的 IQueryable<T>
,而不是修改原来的