[英]Entity Framework - DBContext Equality
我继承了一些代码,其中将现有的DBContext这样分配给局部变量:
using(var context = new DBContext())
{
try
{
...
var localContext = context;
MethodThatAddsStuffToContext(localContext);
...
}
catch etc. etc.
context.SaveChanges();
}
我的问题是:我知道不同的上下文将保留自己的更改,并且保存后它们将仅由其他上下文拾取,但是:
context
和localContext
将共享相同的添加项,而保存其中一个将提交对另一个的更改?
- 上下文是否使用引用相等,是否意味着上面的context和localContext将共享相同的添加项,而保存其中一个将提交对另一个的更改?
这些不是两个上下文,而是对同一上下文的两个引用。 上下文是引用类型,而不是值类型。 调用SaveChanges
,仅在一个上下文上调用它。 是否从localContext
或context
引用都没有关系。
- 如果我有两个现有的单独上下文,并且保存了一个,则将在以后的任何查询中在新上下文中自动获取更改,还是在创建上下文时进行上下文“缓存”(请确保对此的答案)是前者,但只想澄清一下)?
您对“缓存”和“选择更改”的含义尚不完全清楚。 没有实体的缓存,只有上下文知道的实体对象的更改跟踪。 更改跟踪基于每个上下文进行,这意味着当您实际上有两个独立的上下文时,将保存在一个上下文中会更新该上下文的跟踪对象。 另一个上下文不受这些更改的影响,因为它不了解第一个上下文的对象。
- 该代码段是否超出了不良做法? 我认为在任何情况下都不建议这样做。
这个问题不能普遍回答。 如果仅涉及一个上下文,并且在分配后从不更改context
和localContext
,则该代码毫无意义,并且至少令人困惑(这使您感到困惑,这证明了这一点)。 但是,在其他情况下,这种分配是有意义的,例如,当涉及多个上下文并且localContext
可以是其中之一时。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.