gpt4 book ai didi

c# - Entity Framework 模型到 Json 结果

转载 作者:行者123 更新时间:2023-11-30 23:25:30 25 4
gpt4 key购买 nike

我对 Action 返回我的错误感到困惑。我的经理有一个代码:

public class AddressesManager
{

private SiteDBEntities entityContext;

public Addresses GetAddress(short id)
{
entityContext = new SiteDBEntities();
var addressList = entityContext.Addresses.Where(a => a.Id == id).FirstOrDefault();
entityContext.Dispose();
return addressList;
}
}

调用这个函数的 Action :

 [HttpPost]
public ActionResult LoadAddress(short id)
{
AddressesManager mngr = new AddressesManager();
Addresses address = mngr.GetAddress(id);
return new JsonResult() { Data = address };
}

jquery 代码调用 thit 操作:

$.post("/Cart/LoadAddress", { id: id })
.success(function (data) {

console.log(data);
})
.fail(function (e) { console.log(e) });

操作正在运行,但我总是收到此代码的 500 错误:

ObjectContext 实例已被释放,不能再用于需要连接的操作。

据我所知,问题出在 entityContext 上,但为什么会这样?我已经执行了来自数据库的数据,我不再需要连接...

编辑:

这是我的地址模型。它由 EF 自动生成:

public partial class Addresses
{
public int Id { get; set; }
public string Title { get; set; }
public string State { get; set; }
public string Country { get; set; }
public string Warehouse { get; set; }
public string FirstName { get; set; }
public string SecondName { get; set; }
public string Phone { get; set; }
public short DeliveryType { get; set; }
public System.Guid UserId { get; set; }

public virtual DeliveryType DeliveryType1 { get; set; }
public virtual Users Users { get; set; }
}

最佳答案

发生错误是因为您的 Address 类有 2 个虚拟属性:DeliveryType1Users

当您将 address 转换为 JSON 时,它将尝试访问这些虚拟属性。但是,那时,您的上下文已经处理完毕。

为避免此问题,您不应直接返回 EF 自动生成的类。相反,创建一个仅包含一些您需要的字段的 DTO 对象(数据传输对象),将其与 EF 对象映射,然后返回它。例如:

public class AddressesDTO
{
public int Id { get; set; }
public string Title { get; set; }
public string State { get; set; }
public string Country { get; set; }
public string Warehouse { get; set; }
public string FirstName { get; set; }
public string SecondName { get; set; }
public string Phone { get; set; }
public short DeliveryType { get; set; }
public System.Guid UserId { get; set; }
}

然后,映射它:

public Addresses GetAddress(short id)
{
entityContext = new SiteDBEntities();
var addressList = entityContext.Addresses.Where(a => a.Id == id).FirstOrDefault();

// Create DTO object
AddressesDTO address = new AddressesDTO();

// Map it
address.Id = addressList.Id;
address.Title = addressList.Title
// Go on, it's quite long...

entityContext.Dispose();
return address;
}

但是,如您所见,映射过程非常无聊。更好的方法是使用 Automapper .

关于c# - Entity Framework 模型到 Json 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37211642/

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