如何在保存ConversationState和UserState Bot Framework v4时使用SQL

时间:2019-07-25 11:29:55

标签: botframework

我目前正在将bot框架v3迁移到v4。

有什么方法可以将Bot状态存储在SQL数据库上吗?

我在这里看到了有关Bot State的文档:

https://docs.microsoft.com/da-dk/azure/bot-service/migration/net-migration-quickreference?view=azure-bot-service-4.0&viewFallbackFrom=azure-bot-service-3.0

但是它只能保存在CosmoDB或Azure存储上。 Bot Framework v4上没有有关在SQL中保存状态的可用文档

在我的bot框架v3中,我有以下代码将Bot State保存到SQL数据库:

var store = new SqlBotDataStore(ConfigurationManager.ConnectionStrings["statedb"].ConnectionString);          
        Conversation.UpdateContainer(
           builder =>
           {
               builder.Register(c => store)
                    .Keyed<IBotDataStore<BotData>>(AzureModule.Key_DataStore)
                    .AsSelf()
                    .SingleInstance();

               builder.Register(c => new CachingBotDataStore(store,
                          CachingBotDataStoreConsistencyPolicy
                          .ETagBasedConsistency))
                          .As<IBotDataStore<BotData>>()
                          .AsSelf()
                          .InstancePerLifetimeScope();

               builder.RegisterModule(new ReflectionSurrogateModule());

               builder.RegisterModule<GlobalMessageHandlersBotModule>();
           });

我希望bot框架v4具有类似的功能

1 个答案:

答案 0 :(得分:2)

Bot Framework社区已为Bot Builder V4提供了EntityFramework存储。可以找到源代码here,并且该库可以作为nuget包Bot.Builder.Community.Storage.EntityFramework

使用

它与其他V4 IStorage提供程序的使用方式相同:

var entityFrameworkStorage = new EntityFrameworkStorage(Config["SqlConnectionString"]);
services.AddSingleton<IStorage>(dataStore);
services.AddSingleton<UserState>();
services.AddSingleton<ConversationState>();

更多信息可以在这里找到:

https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-concept-state

https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-howto-v4-state