繁体   English   中英

实体框架-DBContext平等

[英]Entity Framework - DBContext Equality

我继承了一些代码,其中将现有的DBContext这样分配给局部变量:

using(var context = new DBContext())
{
  try
  {
     ...

     var localContext = context;
     MethodThatAddsStuffToContext(localContext);

     ...
   }
    catch etc. etc.

  context.SaveChanges();
}

我的问题是:我知道不同的上下文将保留自己的更改,并且保存后它们将仅由其他上下文拾取,但是:

  1. 上下文是否使用引用相等,是否意味着上面的contextlocalContext将共享相同的添加项,而保存其中一个将提交对另一个的更改?
  2. 如果我有两个现有的单独上下文,并且保存了一个,则将在以后的任何查询中在新上下文中自动获取更改,还是在创建上下文时进行上下文“缓存”(请确保对此的答案)是前者,但只想澄清一下)?
  3. 该代码段是否超出了不良做法? 我认为在任何情况下都不建议这样做。
  1. 上下文是否使用引用相等,是否意味着上面的context和localContext将共享相同的添加项,而保存其中一个将提交对另一个的更改?

这些不是两个上下文,而是对同一上下文的两个引用。 上下文是引用类型,而不是值类型。 调用SaveChanges ,仅在一个上下文上调用它。 是否从localContextcontext引用都没有关系。

  1. 如果我有两个现有的单独上下文,并且保存了一个,则将在以后的任何查询中在新上下文中自动获取更改,还是在创建上下文时进行上下文“缓存”(请确保对此的答案)是前者,但只想澄清一下)?

您对“缓存”和“选择更改”的含义尚不完全清楚。 没有实体的缓存,只有上下文知道的实体对象的更改跟踪。 更改跟踪基于每个上下文进行,这意味着当您实际上有两个独立的上下文时,将保存在一个上下文中会更新该上下文的跟踪对象。 另一个上下文不受这些更改的影响,因为它不了解第一个上下文的对象。

  1. 该代码段是否超出了不良做法? 我认为在任何情况下都不建议这样做。

这个问题不能普遍回答。 如果仅涉及一个上下文,并且在分配后从不更改contextlocalContext ,则该代码毫无意义,并且至少令人困惑(这使您感到困惑,这证明了这一点)。 但是,在其他情况下,这种分配是有意义的,例如,当涉及多个上下文并且localContext可以是其中之一时。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM