Answers:
如果要分离现有对象,请遵循@Slauma的建议。如果要加载对象而不跟踪更改,请使用:
var data = context.MyEntities.AsNoTracking().Where(...).ToList();
如评论中所述,这不会完全分离实体。它们仍然处于连接状态,并且延迟加载工作正常,但是未跟踪实体。例如,如果您只想加载实体以读取数据并且不打算修改它们,则应使用此方法。
这是一个选择:
dbContext.Entry(entity).State = EntityState.Detached;
entity
必须是属于您的模型类(人员,客户,订单等)类型的物化对象。您不能直接将IQueryable <T>传递给dbContext.Entry(...)
。那是你的意思吗?
Detached
。如果要从数据库加载实体而不将它们完全附加到上下文(不进行更改跟踪),请使用AsNoTracking
。
Detached
。
using(ctx){ return ctx....ToList(); }
。在这种情况下,使用AsNoTracking()
将是很有意义的,因为我会省去不必要地填充对象上下文的麻烦。我想这可能会带来性能和内存消耗的好处,尤其是对于大型列表,对吧?