实体框架中的虚属性导致System.ObjectDisposedException异常

5

大家好,我需要帮助。在尝试显示有关我的视图中的汽车型号数据时,我遇到了上述错误。

        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int CarId { get; set; }

        [Required]
        public string Registration { get; set; }

        [Required]
        public virtual CarModels Model { get; set; }

        [Required]
        public string RegistrationYear { get; set; }

        [Required]
        public string ChassisNumber { get; set; }

        [Required]
        public int RegistrationId { get; set; }

以下是该函数的代码:

public static List<Cars> GetRegistrationCars(int registration)
        {
            List<Cars> registrationCars = new List<Cars>();
            using (var db = new EventsContext())
            {
                registrationCars = db.Cars.Where(c => c.RegistrationId == registration).ToList();
            }

            return registrationCars.ToList();
        }
4个回答

5

最终我想通了,谢谢你的建议。

 public static List<Cars> GetRegistrationCars(int registration)
        {
            List<Cars> registrationCars = new List<Cars>();

            using (var db = new FerrariEventsContext())
            {
                registrationCars = db.Cars.Include(m=> m.Model).Where(c => c.RegistrationId == registration).ToList();
            }

            return registrationCars;
        }

3

在返回列表后(以及DbContext被释放)尝试延迟加载Model属性。要么急切加载Model属性,要么禁用延迟加载/代理生成。


禁用延迟加载:yourContextName.Configuration.LazyLoadingEnabled = false; - Jason

0

在调用ToList()之前,您正在处理上下文。将ToList()移至using块内部。

    public static List<Cars> GetRegistrationCars(int registration)
    {
        List<Cars> registrationCars = new List<Cars>();
        using (var db = new EventsContext())
        {
            registrationCars = db.Cars.Where(c => c.RegistrationId == registration).ToList();
            return registrationCars.ToList();
        }
        // Here is too late - using has Disposed() the EventsContext() already so ToList will throw an exception
     }

编辑:

假设在linq查询中没有ToList调用(第一次我没有注意到),但现在我希望这是一个打字错误 :)


是的,之前没有注意到……通常在列表上调用 ToList() 有点无意义——被滚动条挫败了哈哈 :) - Charleh
对不起,我不应该包含那个的,那只是我在抓瞎,又把它加回去了。 - rs82uk
那么这是一个打字错误吗?在 Linq 查询中调用 ToList,还是它实际上就在那里?如果没有它,你会得到你提到的错误...但有了它,我就不太确定了! - Charleh
当我调用@item.Model.ModelName时,在视图中出现错误。 - rs82uk
好的,所以这是MVC,你正在尝试进行延迟加载吗? - Charleh
显示剩余2条评论

-1
另一个建议:将GetRegistrationCars()改为异步操作 - 将ToList()更改为等待ToListAsync()

只有当该方法也被声明为“async”,并且应用程序通常使用“async/await”模型时,才会执行异步操作。 - WaitingForGuacamole
这与问题无关。 - Gert Arnold

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接