如何解决此 TypeORM 错误“EntityRepository 已弃用,请改用 Repository.extend 函数”?

2024-03-14

但是,我在 Repository 类中找不到任何 Repository.extend 方法,文档中也没有任何相关内容。怎么解决这个问题呢?

类型版本:“^0.3.0”

我正在使用 Nest js 并尝试创建自定义存储库。


首先:

npm install @nestjs/typeorm@next

NOTE

在我的项目中@nestjs/typeorm版本是9.0.0-next.2 and typeorm版本是0.3.6

在项目的 src 中创建一个名为 database 的文件夹,然后在 (typeorm-ex.decorator.ts and typeorm-ex.module.ts)

// typeorm-ex.decorator.ts

import { SetMetadata } from "@nestjs/common";

export const TYPEORM_EX_CUSTOM_REPOSITORY = "TYPEORM_EX_CUSTOM_REPOSITORY";

export function CustomRepository(entity: Function): ClassDecorator {
  return SetMetadata(TYPEORM_EX_CUSTOM_REPOSITORY, entity);
}

和下一个文件

// typeorm-ex.module.ts

import { DynamicModule, Provider } from "@nestjs/common";
import { getDataSourceToken } from "@nestjs/typeorm";
import { DataSource } from "typeorm";
import { TYPEORM_EX_CUSTOM_REPOSITORY } from "./typeorm-ex.decorator";

export class TypeOrmExModule {
  public static forCustomRepository<T extends new (...args: any[]) => any>(repositories: T[]): DynamicModule {
    const providers: Provider[] = [];

    for (const repository of repositories) {
      const entity = Reflect.getMetadata(TYPEORM_EX_CUSTOM_REPOSITORY, repository);

      if (!entity) {
        continue;
      }

      providers.push({
        inject: [getDataSourceToken()],
        provide: repository,
        useFactory: (dataSource: DataSource): typeof repository => {
          const baseRepository = dataSource.getRepository<any>(entity);
          return new repository(baseRepository.target, baseRepository.manager, baseRepository.queryRunner);
        },
      });
    }

    return {
      exports: providers,
      module: TypeOrmExModule,
      providers,
    };
  }
}

打开您的 AppModule 并进行如下修改:

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'mssql',
      ...
      entities: [Photo],
    }),
    TypeOrmExModule.forCustomRepository([PhotoRepository]),
    ...
  ],
  controllers: [AppController],
  providers: [
    AppService
  ],
})
export class AppModule { }

您可以像下面这样创建客户存储库:

@CustomRepository(Photo)
export class PhotoRepository extends Repository<Photo> {
    public async getAllPhoto() {
        const query = this.createQueryBuilder('photo')
            .where('photo.isPublished = :isPublished', { isPublished: true })
        const photos = await query.getMany()
        return photos
    }
}

一切都很完美。

谢谢 @anchan828 https://gist.github.com/anchan828/9e569f076e7bc18daf21c652f7c3d012

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何解决此 TypeORM 错误“EntityRepository 已弃用,请改用 Repository.extend 函数”? 的相关文章

随机推荐

  • 具有服务器端渲染 HTML 片段的骨干模型

    我想开始使用 Backbone js 来更好地构建我的 JavaScript 文件 但是 我不想重做我的应用程序以通过 API 仅输出 JSON 如果我错了 请纠正我 但到目前为止 我的印象是即使没有 JSON API 我仍然可以使用 Ba
  • Play Framework - 如何忽略 Json 序列化的某些字段?

    我有案例课 case class User id Option Long None username String password Option String None 这是该案例类的 json 序列化器 object User impl
  • Rails:如何更改页面标题?

    在不使用插件的情况下为 Rails 应用程序中的页面创建自定义标题的最佳方法是什么 在你看来 做这样的事情 h1 h1 布局文件中包含以下内容
  • Deedle - 按列区分

    前几天我遇到了一个情况 我的某个特定专栏Frame有一些重复的值 我想删除所述列具有重复值的任何行 我设法使用过滤器函数破解了一个解决方案 虽然它对于手头的探索性数据分析来说已经足够好了 但它应该更加痛苦 尽管四处寻找 我还是找不到任何关于
  • 数据表打印复杂表头打印预览

    您好 我正在使用数据表 它很棒 但我在像这样的复杂标头中遇到问题 thead tr td some text td tr tr td some text td tr thead now in showing page its like li
  • MAMP 未在 El Capitan 10.11.1 上启动 Apache 服务器

    因此 我在 Yosemite 上的 Apache 服务器上使用 MAMP 已经有一段时间了 我只需要一台本地主机 因此我使用常规 MAMP 而不是 MAMP Pro 我使用的是 MAMP 3 4 当我单击 启动服务器 按钮时 它不响应单击
  • mongoose .find() 方法返回具有不需要的属性的对象

    所以 我和猫鼬一起工作已经有一段时间了 我发现了一些非常奇怪的事情 如果有人能启发我 那就太好了 问题是 当使用 mongoose 的 find 方法时 我作为响应得到的对象充满了我不知道它来自哪里的属性 我猜测它们是内置属性 但无论如何
  • 有没有办法为 Class::DBI 提供缓存机制?

    我有一组相当复杂的 ORM 模块 它们继承自类别 DBI http search cpan org dist Class DBI 由于数据变化很少 我正在考虑在此之上使用缓存 记忆层来加快速度 我找到了一个模块 类 DBI 可缓存 http
  • Swift 中的飞利浦 HUE SDK

    我对斯威夫特很陌生 我确实有一些使用 Objective C 的经验 尽管距离我真正用它写过任何东西已经有两年了 我正在尝试将 Phillips HUE SDK 与 Swift 一起使用 但遇到了一些问题 我正在尝试将以下 Objectiv
  • form_for 中的 Rails 参数

    我正在制作一个用于更新或保存已保存消息的表单 subject recipients br
  • 寻找行为类似于 InRequestScope 的 Ninject 作用域

    在我的服务层上我注入了一个UnitOfWork以及构造函数中的 2 个存储库 工作单元和存储库有一个实例DbContext我想在他们两个之间分享 我怎样才能用 Ninject 做到这一点 应该考虑哪些范围 I am 不在网络应用程序中所以我
  • Prometheus 警报管理器不发送警报 k8s

    我使用 Prometheus Operator 0 3 4 和警报管理器 0 20 但它不起作用 即我看到警报被触发 在警报选项卡上的 Prometheus UI 上 但我没有收到任何电子邮件警报 通过查看日志 我看到以下内容 知道吗 请参
  • 防止来自 __doPostBack 的完全回发

    我有一个内容页面 其中包含以下内容 UpdatePanel1 包含错误显示 Div包含两个按钮的更新触发器 UpdatePanel2 包含带有 asp button 的进程 1 updatePanel3 包含带有 asp button 的进
  • 监控 Commons DBCP?

    我的 Tomcat 中的一个巨大的 Web 应用程序有时会开始使用过多的 DBCP 连接 从而导致问题 为了进行调查 我想准确地知道每个时间点哪个线程 方法正在持有池的连接 不需要实时 事后分析就可以了 我一直在寻找这样的DBCP监控工具
  • 删除 Django Crispy Form 中的标签

    有谁知道是否有正确的方法来去除酥脆形式的标签 我到目前为止 self fields field label 但这不是一个很好的解决方案 Just do self helper form show labels False 删除所有标签
  • Java BufferedReader 在循环之前检查循环的下一行

    我正在解析 csv 文件 对于 cvs 的每一行 我使用解析的值创建一个对象 并将它们放入一个集合中 在将对象放入地图并循环到下一个对象之前 我需要检查下一个 cvs 行是否与实际对象相同 但特定属性值不同 为此 我需要检查缓冲区的下一行
  • Djangolush 与 sqlclear 和syncdb

    谁能告诉我们之间是否有区别 gt manage py flush or reset and gt manage py sqlclear appname python manage py dbshell gt manage py syncdb
  • 何时何地调用 VB.NET 中的RemoveHandler?

    我正在开发 NET 1 1 中的 VB NET windows 窗体项目 我有这种类型的架构 非常简单 Public MustInherit Class BaseTestLogic Private TimerPoll As Timer Pu
  • 在 HTML 中设置自定义锚点

    我在帖子中看到过这个主题here https stackoverflow com questions 9380034 setting custom anchorpoint and here https stackoverflow com q
  • 如何解决此 TypeORM 错误“EntityRepository 已弃用,请改用 Repository.extend 函数”?

    但是 我在 Repository 类中找不到任何 Repository extend 方法 文档中也没有任何相关内容 怎么解决这个问题呢 类型版本 0 3 0 我正在使用 Nest js 并尝试创建自定义存储库 首先 npm install