实体框架和实体声明

时间:2013-03-22 20:23:20

标签: entity-framework

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

3 个答案:

答案 0 :(得分:1)

如果加载实体,它将在ObjectStateManager中跟踪,直到放置ObjectContext。您可以加载为无跟踪 - 使用DbContext(或更正确的DbSet),您可以在查询中使用.AsNoTracking

答案 1 :(得分:1)

不要忘记,如果你使用.AsNoTracking,你的实体不在上下文中,只是一个对象,你不能坚持或做出改变。

答案 2 :(得分: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();

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