Bot Framework 4 官方內建的 Storage 並沒有 SQL Server, 僅支援開發用的 MemoryStorage 和 Azure 上的 CosmosDbBlob

因工作上需要,於是就想辦法把寫一個支援 SQL Server 的 Storage

我存取 DB 是使用 EntityFrameworkCore 所以如果沒有裝,要先用 NuGet 裝一下。

如果不想用 EntityFrameworkCore 的人可以直接跳到 Source Code 的部分看,並自己改一下。

建立 DB 存取所需資料

首先先建立用來儲存 Bot State 的 Model,只有兩個欄位 KeyData

接下來要建立 建立 EntityFramework 的 DBContext,記得將 _dbConnectString 改成自己的,如果不是用 SQL Server 的人 UseSqlServer 也要成對應的。

寫到這邊 Entity Framework 必要的東西都有了,記得執行下面兩個指令去產生 DB 的 Table。

dotnet ef migrations add InitialCreate
dotnet ef database update

DB 的部分都完成了,接下來換 Storage 的部分。

替換 Storage

首先先建立 SqlStorage,這份是參考 CosmosDbStorage.cs,因為它相依於 IStorage,所以改起來算好改,要改的東西也就 CRUD 而已,蠻簡單的。

最後將 Startup.cs 中建立 Accessors 的地方改放入我們剛剛寫的 SqlStorage

 IStorage dataStore = new SqlStorage();
 var accessors = new BotAccessors(dataStore);

執行 State 儲存後就會發現 Table 有資料了

最後,對於這個改法有更好建議的人,也歡迎留言指教,讓它更好。