C# 获取值的方法返回已释放的对象
我有以下资料: 这在公共库中:C# 获取值的方法返回已释放的对象,c#,.net,entity-framework,C#,.net,Entity Framework,我有以下资料: 这在公共库中: public static IEnumerable<Attribute> GetImageDimensions(int mediaCategory, int platformId, AttributeType typeOfImage) { using (var db = new Entities()) { var settingLanguage = typeOfImage.ToStrin
public static IEnumerable<Attribute> GetImageDimensions(int mediaCategory, int platformId, AttributeType typeOfImage)
{
using (var db = new Entities())
{
var settingLanguage = typeOfImage.ToString();
var attr = db.MediaCategoryImageDimensions.Where(
id =>
id.MediaCategoryId == mediaCategory &&
id.PlatformId == platformId &&
id.Attribute.Setting == settingLanguage).Select(dim => dim.Attribute).Include(s => s.Value);
return attr;
}
}
我的问题是,每次我都会得到一个返回值,表示枚举的结果是对象已被释放
我还尝试将attr变量移到问题所在的范围之外
我很难理解为什么我的返回值是这个例外:
“无法完成该操作,因为DbContext已被释放。”
因为您返回的是
Linq
表达式,所以查询将在上下文被释放(执行)后发生
您要么需要删除using语句,仅在从中提取所有信息后才处理上下文,要么需要在退出该方法之前返回查询结果
您可以在返回时调用
return attr.ToList()
,强制执行,但这可能会对性能产生负面影响,因为我们看不到您在做什么,但由于您在其中筛选结果,这可能是您的最佳选择。因为您返回的是Linq
表达式,查询将在上下文被释放(执行)后发生
您要么需要删除using语句,仅在从中提取所有信息后才处理上下文,要么需要在退出该方法之前返回查询结果
您可以在返回时调用return attr.ToList()
,以强制执行,但这可能会对性能产生负面影响,因为我们看不到您在执行什么,但由于您在其中筛选结果,因此这可能是您的最佳选择。在返回attr对象之前,对其调用ToList()。这将列出清单
var attr = db.MediaCategoryImageDimensions.Where(
id =>
id.MediaCategoryId == mediaCategory &&
id.PlatformId == platformId &&
id.Attribute.Setting == settingLanguage).Select(dim => dim.Attribute).Include(s => s.Value).ToList();
在返回attr对象之前,对其调用ToList()。这将列出清单
var attr = db.MediaCategoryImageDimensions.Where(
id =>
id.MediaCategoryId == mediaCategory &&
id.PlatformId == platformId &&
id.Attribute.Setting == settingLanguage).Select(dim => dim.Attribute).Include(s => s.Value).ToList();
该上下文在该操作之前被释放。您有什么类型的应用程序?我倾向于使用Repository模式将数据内容的访问封装在工作单元中。您还可以将Entities对象作为类的成员保留,使其不处于disposed状态。您将需要通过最终调用Dispose来管理其生命周期。在此操作之前,上下文已被释放。您有什么类型的应用程序?我倾向于使用Repository模式将数据内容的访问封装在工作单元中。您还可以将Entities对象作为类的成员保留,使其不处于disposed状态。您将需要通过最终调用Dispose来管理它的生命周期这就是我最终要做的。有更好的方法吗?另一个调用会将一个未连接的对象返回到我的上下文中?这就是我最后要做的。有更好的方法吗?将未连接的对象返回到我的上下文的不同调用?