我正在使用 MVVM 架構構建一個 Android 應用程式。表 A 有一個自動生成的主鍵列,它是表 B 中的外鍵。當用戶單擊主片段上的按鈕時,會將一行插入表 A。作為此按鈕的 onClickListener 的一部分,我想檢索創建后自動生成的主鍵值 (rowId) 并將其與更多資料一起插入到表 B 的列中。
我正在使用 MVVM 架構、協程等......但無法弄清楚如何做到這一點。下面是一些代碼,如果有人可以提供幫助,我很樂意發布更多內容。
**// DAO Code**
@Dao
interface WLDAO {
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertTableA(tableAEntry: TableAEntry) : Long
**// Repo Code (function only)**
suspend fun insertTableA(tableAEntry: TableAEntry): Long {
return WLDAO.insertTableA(TableAEntry)
}
**// View Model Code (function only)**
fun addToTableA(tableAEntry: TableAEntry) = viewModelScope.launch {
repo.insertTableA(TableAEntry)
}
uj5u.com熱心網友回復:
我想在創建后檢索自動生成的主鍵值 (rowId),并將其與更多資料一起插入表 B 的列中。
Long
Room DAO 的函式回傳的是@Insert
與該INSERT
操作關聯的行 ID。
為了在進一步的資料操作中使用該值,請在您的存盤庫或視圖模型中處理該值。例如,您的存盤庫可能具有以下內容:
suspend fun doStuffWithBothTables(tableAEntry: TableAEntry, stuffForTableB: Whatever): Long {
val rowID = WLDAO.insertTableA(TableAEntry)
// TODO use rowID and stuffForTableB for some other DAO operations
}
由于doStuffWithBothTables()
is 本身是 a suspend fun
,因此您可以正常呼叫其他suspend
函式,就好像沒有執行緒或涉及任何東西一樣。因此doStuffWithBothTables()
可以從第一個插入中獲取行 ID,然后對該結果進行額外的作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/504031.html