最新的方法说明了向MVC \ WebAPI控制器注入实例权限DbContext
。它有一些专业人士,但我有一个问题还没有回答 - 性能的DbContext
实例创建将不会被使用。ASP.NET DbContext实例注入但未使用 - 性能问题与否?
根据这个问题:What happens when i instantiate a class derived from EF DbContext?DbContext
创建并不是那么便宜的操作(包括内存和CPU)。而且这两次糟糕的时候:
- 你的行动并不需要的DbContext在所有的(所以你有使用和不使用DB混合行动)
- 一些逻辑(如条件)不允许访问
DbContext
(eqModelState.IsValid
)。因此,动作将返回结果BEFORE访问DbContext
实例。
所以在这两个(一个也许另一些情况下)DI创建DbContext
的范围的情况下,它浪费资源,然后就收集它在请求结束。
我没有做任何性能测试,只是搜索了一些文章的第一。我不认为这将是100%的表现缺乏。我只是想:“嘿人,你为什么创建了对象的实例,如果我根本不使用它的话”。
你有哪个版本的EF? EF核心具有这种新的功能上下文池。 –
@GertArnold它是核心。我遇到了池注册和迁移组合问题。你的意思是说,dbcontext池的用法摆脱了DbContext实例吗?我认为资源仍然会被浪费(但并不经常是这样)还有更重要的问题即将到来 - dbcontext生存期(缓存,更改跟踪等) – Sergey
在EF6中,上下文创建被明确设计为轻量级操作。所以我不明白为什么在ef-core中引入了上下文池。坦率地说,这让我对ef-core中上下文创建的成本有点怀疑。我只是在文档下面留下了一个关于这个问题的问题。但无论如何,我不会为此担心。设计你的控制器,使它们不包含既需要也不需要上下文的方法。在有切实原因时优化这些内容。 –