【问题标题】:Ef Core static extension queries [closed]Ef Core静态扩展查询[关闭]
【发布时间】:2020-04-12 13:21:53
【问题描述】:

工作单元/存储库并不是真正的最佳实践。

它们以隐藏 EF Core 而闻名,性能不佳。

我有一些想要实现的目标:

  1. 存储查询(所以我不必每次都重写)
  2. 轻松访问

我想过使用静态扩展方法来提供这样的查询:

UserEntity.GetUserById(int userId, _dbContext)

public static GetUserById(int userId, _dbContext) => 
_dbContext.Set<UserEntity>().where(x=> x.userId == userId)

我知道不建议使用静态。但我认为将它用于无状态查询没有任何问题。而且我会将它们直接捆绑到实体上,因此很容易找到。

Q1:当我在静态扩展方法中存储大量查询时,会不会出现问题?

Q2:有比工作单元/存储库更好的模式吗?

将查询存储在实体本身不是我的选择,因为我与 Blazor 项目共享实体。

【问题讨论】:

标签: c# .net-core entity-framework-core static


【解决方案1】:

工作单元/存储库并不是真正的最佳实践。

有点。 DbContext 已经是一个 Repository 和一个 Unit-of-Work 实现。有争议的是稍后在您的 DbContext 实现之上添加一个额外的 UoW 或存储库。

您的 DbContext 上的实例方法/属性是放置将在多个位置使用的查询的规范位置。

请注意,DbSet&lt;T&gt;.Find(object[]) 是具有缓存读取语义的开箱即用的密钥查找 API。

【讨论】:

  • 这也是有争议的,因为我从来没有见过一个在处理诸如在一个事务中更新多个工作单元或转到另一个存储库以获取相关对象之类的事情时不会破坏存储库的。大多数实施得很糟糕。
  • 绝对。低回报,高风险。
猜你喜欢
  • 2021-10-24
  • 2019-01-19
  • 2021-10-15
  • 2020-03-29
  • 1970-01-01
  • 2015-03-12
  • 2011-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多