c# - EF : detach vs. 预加载与 noTracking

标签 c# asp.net entity-framework

我对以下内容的含义有点困惑:

它们有什么区别?

1) AsNoTracking - 意思是没有脏检查。 (与将 EntityState 更改为 Detached 一样吗?)

2) context.Detach(order) - (与将 EntityState 更改为 Detached 一样吗?)

3) NoTracking 是否也需要预先加载?

 creativeWorkshopEntities.Job.MergeOption = MergeOption.NoTracking;
    var q = from c in creativeWorkshopEntities.Job.Include("Files")
            where c.Id == jobId                    
            select c; 

我只想分离实体

我的 BL 类 中的每个请求都有一个 using 语句。

从数据库中填充缓存后我无法分离实体

因为我仍然在应用程序流程中调用它的属性。我猜它会抛出运行时异常(objectContext is desposed)

你觉得我的逻辑对吗?

public static Group GetMamData(string stamp, MaMDBEntities maMDBEntities)
{
    Group group = MamDataCacheManager.GetMamData(stamp);
    if (group == null)
    {
        //was not found in the cache
        //check for aveilable test with status 'start' - 1
        group = GetGroupsFromDb(stamp, maMDBEntities);

        if (group != null)
        {
            maMDBEntities.Entry(group).State = EntityState.Detached;
            MamDataCacheManager.InsertMamData(stamp, group);
        }
    }

    //option B: attache a new context
    if (maMDBEntities.Entry(group).State == EntityState.Detached)
    {
        maMDBEntities.Groups.Attach(group);
    }
    return group;
}

最佳答案

ORM (EF) 的主要功能之一是更改跟踪:跟踪更改/删除/新实体,以便生成正确的 SQL。

但是更改跟踪不是免费的,它需要相当多的空间。所以当你不需要它时,使用 AsNoTracking 作为优化。

1) AsNoTracking - meaning no dirtiness check. (same as changing EntityState to Detached?)

最终结果是一样的,但加载它而不跟踪比稍后关闭它更便宜。

2) context.Detach(order) - (same as changing EntityState to Detached?)

基本上,是的。但我认为调用 Detach() 是正确的方法。

3) is NoTracking also needed for eager loading?

不,我不这么认为。

关于c# - EF : detach vs. 预加载与 noTracking,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14728148/

相关文章:

c# - 从静态类 C# 访问匿名对象属性

c# - Nunit 测试 dll,单独运行通过,一起运行第二个失败

c# - 在测试执行期间确定解决方案路径

c# - Entity Framework 处理并发

c# - 关于 MSVSMON.EXE 似乎没有运行的 Visual Studio 调试错误

c# - ASP.NET 动态控件添加

c# - ASMX 网络服务枚举不保留其值(value)

c# - 如何使用身份框架在 C# 和 ASP.NET 中配置基于角色的访问权限?

c# - 如何删除 Entity Framework 6 中的多对多关系

entity-framework - Entity Framework 中的 LinqKit 和异步