使用DbContext更改跟踪信息

时间:2013-01-17 05:45:35

标签: asp.net asp.net-mvc-3 entity-framework-5 dbcontext

在阅读N-Tiered Applications上的文章时,我发现了有关并发令牌和更改跟踪信息的信息:

  

要理解的另一个重要概念是   默认生成的实体支持序列化,它们   更改跟踪信息存储在ObjectStateManager中(a   ObjectContext的一部分,它不支持序列化。

我的问题有三个:

  1. 使用DbContext时是否有同样的事情?
  2. 如果与数据库的唯一交互是在Repository语句中的using类中,那么当程序离开using语句时关闭数据库连接会删除任何选项改变追踪?
  3. 这可以作为/使用并发令牌吗?

1 个答案:

答案 0 :(得分:1)

  1. 是。 DbContext只是ObjectContext的包装,它通过ChangeTracker属性(返回DbChangeTracker)和特定实体通过调用Entry方法公开更改跟踪信息(返回{ {1}})。
  2. 是。关闭上下文将删除所有更改跟踪信息。
  3. 并发令牌和变更跟踪是两个完全不同的概念。更改跟踪告诉上下文当您调用DbEntityEntry<T>时,它必须在数据库上执行哪些操作。它跟踪您对实体所做的更改,因为您已将它们加载到当前上下文实例中。并发令牌解析数据库中的乐观并发=>它验证另一个进程/线程/用户/上下文实例未在SaveChanges期间更改您的上下文将要修改的相同记录。