- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经看到这个问题被问了一百万次,但我遇到的每一个建议似乎都已经涵盖了。
我的 MVC 解决方案中有 Entity Framework ,我有一个“存储库”,它试图检索 MyObject
的集合:
public static List<MyObject> GetMyObjects()
{
using (var context = new MyEntities())
{
return context.MyObjects.Include("Contact").OrderByDescending(o => o.Date).ToList();
}
}
我将此方法称为尝试序列化它的 Controller 操作的一部分:
public JsonResult All()
{
return Json(MyRepository.GetMyObjects(), JsonRequestBehavior.AllowGet);
}
我收到以下错误:
ObjectContext 实例已被释放,不能再用于需要连接的操作。
我不知道在哪里打开这个,我很欣赏 Entity Framework “延迟加载”关系数据集,如果需要的话,我很欣赏尝试序列化整个集合确实会尝试加载这些(在 using 语句之外),但我在那里有“包含”。
我尝试过的
我试过“include”,我还确保没有其他关联是 MyObject
类的一部分(即我没有其他 Include()
写)。
最佳答案
要避免这种情况,您有一些选择。不要将您的导航属性声明为虚拟
或在您的上下文中禁用延迟加载 行为。默认情况下启用延迟加载,它是通过创建派生代理类型的实例然后覆盖 virtual
属性以添加加载 Hook 来实现的。因此,如果您想使用序列化程序,我建议您关闭延迟加载:
public class YourContext : DbContext
{
public YourContext()
{
this.Configuration.LazyLoadingEnabled = false;
}
}
这些链接可以帮助您更好地理解我在回答中解释的内容:
如果您从导航属性中删除 virtual
关键字,POCO 实体将不满足第二个链接中描述的要求,因此,EF 不会创建代理类来延迟加载您的导航属性.但是,如果您禁用延迟加载,即使您的导航属性是 virtual
,它们也不会加载到任何实体中。使用序列化器时禁用延迟加载是个好主意。大多数序列化程序通过访问类型实例的每个属性来工作。
作为第三个选项,您可以使用 JsonIgnore您不希望作为实体的一部分序列化的导航属性属性,但正如我之前所说,最好的选择是禁用延迟加载。
关于c# - ObjectContext 实例已被处置,不能再使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30744530/
我有本地更改和远程更改。 有人告诉我必须先推,再 pull 。这背后有什么原因吗? 最佳答案 那个人错了:正确的模型是pull-before-you-push,而不是相反。 当您pull时,git 将
我正在使用最新版本的 Flat UI Pro 1.3.2 ( http://designmodo.com/flat/ ),jQuery 插件 flatui-radiocheck v0.1.0 和 iO
我是一名优秀的程序员,十分优秀!