不能对 *gorm.db而不是gorm.db使用WithContext(ctx)方法

sbtkgmzw  于 2022-12-07  发布在  Go
关注(0)|答案(1)|浏览(311)

我将数据库初始化为结构体

type DBStorage struct {
   db *gorm.DB
}

db, err := gorm.Open("postgres", DatabaseURL)
...
return &DBStorage{
   db: db,
}

一切正常:查询、更新和所有其他操作。但后来我尝试向我的项目中添加上下文,结果却不是这样:

func (dbStorage DBStorage) PutOrder(order service.Order, ctx context.Context) error {
...
   dbStorage.db.WithContext(ctx).Create(&order)
...
}

它说WithContext是一个未解析的引用。而dbStorage.db.Create(&order)工作正常。我应该如何修复这个问题?
我尝试了一些愚蠢的事情,比如从struct中删除 *,但这有点破坏了整个封装的想法。我也尝试了阅读https://gorm.io/docs/method_chaining.html,但没有得到如何实现它,也没有得到它是否是我的案例的解决方案。如果是,我要求一些澄清。

2ledvvac

2ledvvac1#

请检查您的导入语句。它应该是import gorm.io/gorm而不是import github.com/jinzhu/gorm
该库的第一个版本是github.com/jinzhu/gorm,其中gorm.DB类型没有WithContext()方法。
GORM V2移到https://github.com/go-gorm/gorm,导入路径为gorm.io/gorm。版本2添加了DB.WithContext()方法。

相关问题