我有以下内容:
这是一个公共图书馆:
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;
}
}
在另一个项目中进行以下调用:
var expectedDimension = AttributeDAO.GetImageDimensions(
MediaCategoryDAO.GetMediaCategoryId(_objectToValidate.MediaCategory),
_airline.AirlinePlatforms.First().PlatformId,
AttributeType.RecommendedPreviewDimension);
我的问题是每次都得到一个返回值,表示枚举的结果是对象已被处理掉。
我也尝试将attr变量移到使用范围之外,认为这就是问题所在。
我很难理解为什么我的返回值是这个例外:
&#34;由于已经处理了DbContext,因此无法完成操作。&#34;
答案 0 :(得分:3)
因为您要返回Linq
表达式,所以查询将在处理完上下文后发生(deferred执行)
您需要删除using语句,并在从中提取所有信息后才处理上下文,或者在退出方法之前需要从查询中返回结果。
您可以在返回时调用return attr.ToList()
以强制执行,但这可能会对性能产生负面影响,因为我们无法看到您正在执行的操作,但由于您在此范围内过滤结果可能是您的最佳选择。
答案 1 :(得分:2)
在返回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();