ObjectContext实例已被释放,无法再使用(ASP.NET MVC)

时间:2018-02-11 19:15:23

标签: c# asp.net asp.net-mvc entity-framework

我在repo中有方法,从数据库表中获取所有数据。

这是Model

 public partial class User
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public User()
    {
        this.Roles = new HashSet<Role>();
    }
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<Role> Roles { get; set; }
}

这是回购代码

 public List<User> GetUsers()
    {
        using (var ctx = new HomstersTestDBEntities())
        {

            var items = ctx.Users.ToList();
            return items;
        }
    }

就像我在控制器中所说的那样

  public JsonResult GetUsers()
    {
        var users = _userrepo.GetUsers();
        return Json(users.ToArray(), JsonRequestBehavior.AllowGet);
    }

但是当我运行网站时,我在调用方法

时遇到此错误

enter image description here

我该如何解决?

1 个答案:

答案 0 :(得分:0)

我认为问题是在函数返回Json(users.ToArray(),JsonRequestBehavior.AllowGet)中序列化角色期间;它试图获得对角色的访问权限,但是由于上下文被处理掉,因为他的生命周期只在GetUsers()函数中抛出异常。

我认为你应该在处理上下文之前在GetUsers函数中获得这些角色。我还没有测试过它。如果它没有用,我会尝试重现它。

public List<User> GetUsers()
{
    using (var ctx = new HomstersTestDBEntities())
    {

        var items = ctx.Users.Include(x => x.Roles).ToList();
        return items;
    }
}