1

如果您从 Entity Framework 加载实体并将引用存储在某处。实体框架是否会跟踪对象直到它被处置?你可以随时保存对象的状态吗?(它如何跟踪它)我们谈论的是应用程序而不是 Web 应用程序。

4

3 回答 3

1

如果您加载一个实体,它将在 ObjectStateManager 中被跟踪,直到 ObjectContext 被释放。您可以加载是因为没有跟踪 - 您可以.AsNoTracking在查询中使用 DbContext(或更正确的 DbSet)

于 2013-03-22T20:28:44.933 回答
1

如果您使用 .AsNoTracking,请不要忘记您的实体不在上下文中,并且只是一个对象,您无法持久保存或进行更改。

于 2013-11-18T03:18:59.937 回答
0

只要您的数据库上下文存在,实体就会被跟踪。这是假设您没有手动分离它。

考虑(手绘/伪):

MyEntity entity;

using (var context = new MyDbContext())
{
    entity = context.MyEntities.First();
}

entity.Property1 = "something"; // success
entity.LazyNavigationProperty.Property2 = "something"; // fail

延迟加载将失败,因为您已经处理了上下文及其与它的连接。

考虑到:

var context = new MyDbContext())
MyEntity entity = context.MyEntities.First();

entity.Property1 = "something"; // success

// do loads of stuff

entity.LazyNavigationProperty.Property2 = "something"; // success

context.SaveChanges();

上下文仍然是打开的,因此实体将被跟踪并按需保留。

于 2013-03-22T20:26:49.047 回答