如何对同一个内存数据库进行两个 GORM 会话?

How to have two GORM sessions to the same in-memory database?

我正在尝试测试 GORM 代码。代码路径打开一个新的 GORM 会话。第一个会话将数据添加到 GORM,第二个会话使用它。测试时,似乎 GORM 在使用内存参数 :memory: 时会忘记第一个会话的数据。我什至尝试了 cache=shared 选项但没有成功。

这是一个示例测试:

type testRecord struct{
    ID string
    Data string
}


func TestOpenGormTwice(t *testing.T){
    cxn:=":memory:?cache=shared"
    database, err := gorm.Open("sqlite3", cxn)
    assert.NoError(t, err)

    err=database.CreateTable(&testRecord{}).Error
    assert.NoError(t, err)

    err=database.Create(testRecord{
        ID:   "1",
        Data: "abc",
    }).Error
    assert.NoError(t, err)

    tr:=testRecord{}
    err=database.First(&tr).Error
    assert.NoError(t, err)

    assert.True(t, database.HasTable(&testRecord{}))

    //Open :memory: again, hopefully it won't forget what was saved last time
    database2, err := gorm.Open("sqlite3", cxn)
    assert.NoError(t, err)
    assert.True(t, database2.HasTable(&testRecord{}))
}

测试在最后 assert.True 失败。这段代码怎么修改才能通过最后的测试?

我也试过cxn:="memdb1?mode=memory&cache=shared",它似乎有效,但实际上它并没有进入内存模式as described in the Sqlite docs

这有效:cxn:="file:memdb1?mode=memory&cache=shared"

感谢@karmakaze 的评论。