我正在处理ObjectContext实例,即使没有处理任何内容

时间:2017-04-05 13:44:01

标签: c# entity-framework

我收到以下错误

  

ObjectContext实例已被释放,不能再用于需要连接的操作。

但我不明白为什么框架会抛出这个错误。这是代码。

var bookmark = type.ToLower() == "bookmark"
    ? db.Bookmarks.First(u => u.BookmarkID == id)
    : db.Users.First(u => u.UserID == id).Videos.FirstOrDefault(a => a.Recording)?.Bookmarks.OrderBy(b => b.Timestamp).FirstOrDefault();
if (bookmark != null)
{
    var meta = bookmark.relBookmarkMetadatas.Select(a => new
    {
        Value =
        FormatValue(a.Value, a.MetadataDefinition.MetadataType.ObjectType, a.MetadataDefinition.MetadataType.FormatString),
        a.MetadataDefinition.MetadataClass.Class,
        a.MetadataDefinition.Name,
        a.MetadataDefinition.MetadataType.ObjectType,
        a.MetadataDefinition.MetadataType.FormatString
    });
    return Json(meta, JsonRequestBehavior.AllowGet);
}

为什么我收到此错误?

错误在

 var meta = bookmark.relBookmarkMetadatas.Select(a => new

1 个答案:

答案 0 :(得分:1)

您已将延迟加载的EntityFramework ICollection传递给Json(..)方法。在序列化响应时,EntityFramework上下文将被释放。

在通过.ToList() / ICollection / IQueryable之前,将IEnumerable添加到return Json(meta.ToList(), JsonRequestBehavior.AllowGet); / xxx@xxx:~/bin/scala-bindgen$ ./bindgen/target/scala-2.11/bindgen-out // argc=1 // argv[0]=bindgen // _argc=1 arg_files : clang_args : link : output : --undefined-- match : --undefined-- builtins : false clang_ast : false override_enum_type: --undefined-- ctypes_prefix : --undefined-- use_core : false remove_prefix : --undefined-- no_scala_enums : false / xxx@xxx:~/bin/scala-bindgen$ ./bindgen/target/scala-2.11/bindgen-out -emit-clang-ast -o getopt.scala test/getopt.h // argc=5 // argv[0]=bindgen // argv[1]=-emit-clang-ast // argv[2]=-o // argv[3]=getopt.scala // argv[4]=test/getopt.h // _argc=5 arg_files : test/getopt.h clang_args : link : output : getopt.scala match : it-clang-ast builtins : false clang_ast : true override_enum_type: --undefined-- ctypes_prefix : --undefined-- use_core : false remove_prefix : --undefined-- no_scala_enums : false --> Processing file: /home/xxx/bin/scala-bindgen/test/getopt.h 1 index: 14ec4a0 2 unit: c4004ac0 3 4 5 6 Done. 的末尾。

xxx@xxx:~/bin/scala-bindgen$ ls
bindgen  build.sbt  LICENSE  project  README.md  target  test