BotData不节能

问题描述 投票:2回答:1

我想在C#中的firstRun创建中间件和不能似乎得到它来保存数据。由于上下文不存在于中间件,我使用下面的语法来保存数据。它不仅救不了,但我想知道以下几点:

为什么,当我保存在一个正常的对话做我访问的SetValue并在这里我只需要访问的SetProperty?

public class FirstRunActivityLogger : IActivityLogger
{
    public async Task LogAsync(IActivity activity)
    {
        var allActivity = (Activity)activity;
        StateClient stateClient = allActivity.GetStateClient();
        BotData userData = await stateClient.BotState.GetUserDataAsync(activity.ChannelId, activity.From.Id);
        if (!userData.GetProperty<bool>("FirstRun"))
        {
            Debug.WriteLine($"From:{activity.From.Id} - To:{activity.Recipient.Id} - Message:{activity.AsMessageActivity()?.Text}");
            userData.SetProperty<bool>("FirstRun", true);
        }
    }
}
c# .net botframework
1个回答
3
投票

只要记住,userData只是一个对象并调用SetProperty()简单地设置一个对象的属性,但不保存任何东西。所以,为了节约您应该使用SetUserDataAsync()和传球,改变userData它的机器人状态。 Here是如何做到这一点:

await stateClient.BotState.SetUserDataAsync(activity.ChannelId, activity.From.Id, userData); 
© www.soinside.com 2019 - 2024. All rights reserved.