供参考:我正在将 NestJS (TypeORM) 与 SQL Server 数据库结合使用
TypeORM 中有没有办法查询数据库上的现有视图? 我知道 TypeORM 的View Entity,但是选项的描述将“表达式”参数列为required。 由于视图已存在于数据库中,因此我不需要(也不想)在后端重新创建它。
我发现有些人会做这样的事情:
import { ViewEntity} from 'typeorm';
@ViewEntity({
expression: 'select * from database_view'})
}
export class View {}
但这看起来更像是一种解决方法,而不是一个实际的解决方案?
同样有趣的是,如果我只使用 @ViewEntity 而不像这样使用表达式属性,我不会收到错误:
import { ViewEntity} from 'typeorm';
@ViewEntity()
export class View extends BaseEntity {
@Column()
col1: string
}
我认为有关 ViewEntity 的文档也留下了很大的解释空间: “视图实体是映射到数据库视图的类。您可以通过定义一个新类并用 @ViewEntity() 标记它来创建视图实体”
对我来说,第一句话听起来像是我能够映射到数据库上的(现有)视图,但第二句话则表示您需要“创建一个视图实体”。
所以问题是:查询数据库上现有视图而不在后端重新创建视图的正确方法是什么?
我同意文档令人困惑,不需要“表达式”选项,您可以使用“同步”选项。
https://github.com/typeorm/typeorm/blob/master/src/decorator/options/ViewEntityOptions.ts
@ViewEntity({
name: 'existing_view',
synchronize: false
})
或
@ViewEntity('existing_view', {
synchronize: false
})