我收到以下错误
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
答案 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