gpt4 book ai didi

c# - 使用语句和 Entity Framework

转载 作者:太空宇宙 更新时间:2023-11-03 20:20:33 24 4
gpt4 key购买 nike

只要我不使用注释掉的 using 语句,下面的代码就可以工作。当我使用 using 时,我得到 The operation cannot be completed because the DbContext has been disposed

public IQueryable<DTOs.FormQuestionDTO> GetForm(int id, int page = 0)
{
// FS stores pages starting with 1
page = page == 0 ? 1 : page;

//using (var db = new Models.FormEntities())
//{
var db = new Models.FormEntities();

var questions = from fq in db.FormQuestions
join q in db.Questions on fq.QuestionId equals q.QuestionId
where (fq.FormId == id) && (fq.PageNumber == page) && fq.Disabled == false
orderby fq.DisplayOrder
select new { q.QuestionId, q.QuestionText, fq.DisplayOrder, fq.PageNumber };

var dto = questions.Project().To<DTOs.FormQuestionDTO>();

if (questions == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
else
{
return dto;
}
//}
}

我最初的预感是,Using 在 LINQ 查询之后立即处理 DbContext,但是当我将 .Dipose() 放入 finally block 。

这是怎么回事?我有一段时间没有使用 C#,所以我可能遗漏了一些简单的东西。

最佳答案

Entity Framework LINQ 提供程序使用 deferred execution .这意味着在迭代 IQueryable 之前不会在数据库上执行查询。

发生的事情是,在您的上下文被处理后,某些东西会迭代您的可查询对象,这会导致它尝试执行数据库查询。

您可以通过调用 ToList() 强制它立即执行。

var dto = questions.Project().To<DTOs.FormQuestionDTO>().ToList();

关于c# - 使用语句和 Entity Framework ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13826536/

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