gpt4 book ai didi

c# - ObjectContext 实例已被释放,不能再用于需要连接的操作。在引用表中

转载 作者:IT王子 更新时间:2023-10-29 04:16:17 26 4
gpt4 key购买 nike

我有两个表 CustomersCountry 并使用(Entity Framework with vs 2012)

enter image description here

和模型类

 using System;
using System.Collections.Generic;

public partial class Customer
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address { get; set; }
public string Email { get; set; }
public string Phone { get; set; }
public Nullable<int> CountrryId { get; set; }
public string Note { get; set; }

public virtual Country Country { get; set; }
}

我尝试构建一个选择查询以获取所有具有国家/地区名称的客户。但我总是收到以下错误消息。

enter image description here

最佳答案

在处理数据上下文后,您正试图访问关联属性 Country。 Entity Framework ,默认情况下,loads association properties lazily .换句话说,当您第一次尝试访问关联属性时,它会再次访问数据库。要完成此数据库之旅, Entity Framework 必须使用数据上下文。在您的情况下,它将尝试使用由 jQGridDemoEntities db = new jQGridDemoEntities() 创建的数据上下文,不幸的是,它已在您的代码中此时被处理掉。数据上下文已被释放,因为您已退出 using block .

您有三种选择来解决这个问题:

  • 在数据上下文仍然存在时访问关联属性。更具体地说,将访问关联属性的代码移动到 using block 中

  • 按照我指定的第一个链接中的说明提前加载关联属性

    customers = db.Customers.Include(c => c.Country).ToList()

  • 在数据上下文仍然存在时,明确选择要从数据库返回的内容。并使用该信息构建您返回的 json 对象。

    customers = db.Customers.Select(c => new
    {
    c.Id,
    c.FirstName,
    c.LastName,
    c.Address,
    c.Email,
    c.Phone,
    CountryName = c.Country.Name,
    c.Note
    };

关于c# - ObjectContext 实例已被释放,不能再用于需要连接的操作。在引用表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22007025/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com