gpt4 book ai didi

entity-framework - Entity Framework 如何跟踪加载的实体?它们的生命周期是怎样的?

转载 作者:行者123 更新时间:2023-12-02 17:16:25 24 4
gpt4 key购买 nike

我对 Entity Framework 比较陌生,我能找到的所有文档或书籍都在谈论如何使用该框架,或者应该使用哪种模型,但缺乏深入解释该框架如何工作。

例如,当我通过 LINQ 查询或框架方法从数据库加载实体时,这些实体线程安全吗?换句话说,它们可以与其他线程共享吗?如果是的话EF如何控制一致性?

当控制脱离上下文时,这些实体是消失了还是仍在内存中? .SaveChanges 之后这些实体消失了吗?生命周期是怎样的?

请EF专家详细解释一下以上几点。

提前致谢。

最佳答案

加载实体的生命周期或多或少与加载它们的实体上下文的生命周期相关。因此,在许多示例中您会看到:

using (var ctx = new Context())
{
// ... do work
} // The context gets disposed here.

一旦上下文被释放(例如,在 using 语句的末尾),您不应再将上下文中加载的实体视为可以从中加载附加信息。例如,不要尝试访问它们的导航属性。为了避免出现问题,我通常发现最好创建一个仅包含我希望人们能够使用的确切数据的 DTO,并使其成为离开 using 语句的唯一值。

using (var ctx = new Context())
{
var q = from p in ctx.People
select new PersonSummary{Name = p.Name, Email = p.Email};
return q.ToList(); // This will fully evaluate the query,
// leaving you with plain PersonSummary objects.
}

实体上下文不是线程安全的,因此您不应该尝试从绑定(bind)到同一上下文的对象的多个线程加载导航属性等,即使在上下文的生命周期内也是如此。

关于entity-framework - Entity Framework 如何跟踪加载的实体?它们的生命周期是怎样的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12957715/

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