【问题标题】:How to call SQL functions / stored procedure when using the Repository pattern使用存储库模式时如何调用 SQL 函数/存储过程
【发布时间】:2021-07-17 22:29:20
【问题描述】:

在将代码转换为使用存储库模式时,调用 SQL 函数/存储过程的最佳方式是什么?具体来说,我对读取/查询功能感兴趣。

选项

  1. ExecuteSqlQuery 添加到IRepository
  2. 添加特定于上下文的新存储库接口(即ILocationRepository)并添加特定于资源的方法
  3. 为所有随机存储过程添加一个特殊的“存储库”,直到它们全部被转换
  4. 不要。只需将存储过程转换为代码,并将逻辑放在服务层中

选项 #4 似乎确实是最好的长期解决方案,但它也需要更多时间,我希望将其推到未来阶段。

哪个选项(以上或其他)是“最好的”?

注意:我的架构基于 ardalis/CleanArchitecture 使用 ardalis/Specification,尽管我愿意接受所有建议。

【问题讨论】:

    标签: repository-pattern ddd-repositories ardalis-cleanarchitecture


    【解决方案1】:

    不要将 STORED PROCEDURES 视为二阶公民。一般来说,避免使用它们,因为它们经常会带走您的域代码并将其隐藏在数据库中,但有时由于性能原因,它们是您唯一的选择。在这种情况下,您应该使用选项 2 并将它们视为一些简单的数据库提取。

    选项 1 真的很糟糕,因为您很快就会在您不想要的地方(应用程序服务)中拥有大量 SQL,并且它会阻止移植到其他存储介质。

    选项 3 是不必要的,存储过程并不比简单的 Entity Framework Core 数据库访问请求差。

    选项 4 是您不能总是避免存储过程的原因。有时尝试查询应用程序服务/存储库中的内容会产生非常大的性能问题。那时,并且仅当您应该介入存储过程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-23
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 2014-10-09
      • 1970-01-01
      • 2015-10-21
      • 1970-01-01
      相关资源
      最近更新 更多