【问题标题】:The ObjectContext instance has been disposed and can no longer be used(ASP.NET MVC) [duplicate]ObjectContext 实例已被释放,不能再使用(ASP.NET MVC)[重复]
【发布时间】:2018-02-12 04:15:12
【问题描述】:

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

这是模型

 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);
    }

但是当我运行网站时,我在方法调用时收到此错误

我该如何解决?

【问题讨论】:

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


    【解决方案1】:

    我认为问题在于在函数中序列化角色时 return 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;
        }
    }
    

    【讨论】:

    • Severity Code Description Project File Line Suppression State Error CS1660 Cannot convert lambda expression to type 'string' because it is not a delegate type TestTask C:\Users\nemes\source\repos\testtask\TestTask\TestTask\Repository\UserRepository.cs 46 Active我有这个
    • @Balance 您正在尝试使用接受字符串的方法。您可以将方法调用更改为ctx.Users.Include("Roles"),或者您可以通过添加 using 语句来使用接受表达式的扩展方法:using System.Data.Entity;
    猜你喜欢
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 2011-09-18
    • 2012-07-17
    相关资源
    最近更新 更多