通过将实体附加到上下文是什么?

时间:2013-06-02 17:42:41

标签: entity-framework-5 state

我了解到实体是表示数据库模式中的表的类。但是在这个链接上,他们谈到了被上下文跟踪(附加)的实体

http://msdn.microsoft.com/en-us/data/jj592676.aspx

Added: the entity is being tracked by the context...

他们是否谈到实体框架跟踪的实体的对象/实例(所以类)?或者从字面上看实体本身?我很困惑。

在我的一个网络应用程序中,我使用的是此代码,它是说FinalStudyDecision的所有实例都处于修改状态,还是只是对象fsd

context.FinalStudyDecisions.Attach(fsd);
context.Entry(fsd).State = EntityState.Modified;

或者这段代码只为一个对象做了吗?

ObjectStateManager.ChangeObjectState(fsd, EntityState.Modified);

1 个答案:

答案 0 :(得分:1)

当实体附加到上下文时,上下文“知道”该对象并开始跟踪其更改。

通常,实体在从数据库中提取时附加到上下文,例如,按context.FinalStudyDecisions.Single(x => x.Id == 1)(如果有一个项目当前ID == 1)。

但是如果你有一个上下文不知道的现有FinalStudyDecisions,你可以使用Attach方法让它知道。这通常发生在将对象序列化并随后从Web客户端反序列化时。

如果您将某个对象附加到某个上下文,其状态(EntityState)为Unchanged,那么当您从Web客户端收到该状态时,通常会将其状态更改为Modified。这将触发EF在调用SaveChanges时存储对象。

两个

// DbContext API
context.Entry(fsd).State = EntityState.Modified;

// ObjectContext API
ObjectStateManager.ChangeObjectState(fsd, EntityState.Modified);

仅更改fsd对象的状态。

重要提示:,如果您 Add 上下文的对象,可以通过设置其状态Added或将其添加到{{ 1}}(或DbSet),不仅ObjectSet,而且其所有子对象都更改为fsd