我想讓我的對話框與我的數據庫一起工作。 如果我有我的對話是這樣的:Microsoft Bot Framwork使用數據庫結果
[Serializable]
public class QuestionDialog : IDialog<object>
{
/// <summary>
/// Start our response
/// </summary>
/// <param name="context">The current context</param>
/// <returns></returns>
public async Task StartAsync(IDialogContext context)
{
// Move to the next method
context.Wait(StepOneAsync);
}
/// <summary>
/// When our message is recieved we execute this delegate
/// </summary>
/// <param name="context">The current context</param>
/// <param name="result">The result object</param>
/// <returns></returns>
private async Task StepOneAsync(IDialogContext context, IAwaitable<IMessageActivity> result)
{
// Get our activity
var activity = await result;
// Ask our first question
await context.PostAsync("hi");
// Get our answer
context.Done(this);
}
}
一切正常,我讓我的消息,如預期。然後,我把它改成這樣:
[Serializable]
public class QuestionDialog : IDialog<object>
{
// Private properties
private IList<QuestionGroup> _questionGroups;
/// <summary>
/// Start our response
/// </summary>
/// <param name="context">The current context</param>
/// <returns></returns>
public async Task StartAsync(IDialogContext context)
{
try
{
// Create our service
var questionGroupService = new QuestionGroupService(new UnitOfWork<DatabaseContext>());
// Add our question groups
this._questionGroups = await questionGroupService.ListAllAsync();
// Move to the next method
context.Wait(StepOneAsync);
} catch (Exception ex)
{
}
}
/// <summary>
/// When our message is recieved we execute this delegate
/// </summary>
/// <param name="context">The current context</param>
/// <param name="result">The result object</param>
/// <returns></returns>
private async Task StepOneAsync(IDialogContext context, IAwaitable<IMessageActivity> result)
{
// Get our activity
var activity = await result;
// Ask our first question
await context.PostAsync("hi");
// Get our answer
context.Done(this);
}
}
而且它不會去的StepOneAsync方法。任何人都可以看到明顯的事情,爲什麼這不起作用?
QuestionGroup被標記爲Serializable?如果你在對話框中持有引用,它們都需要是可序列化的(或者你需要明確地告訴對話框威脅它們不可序列化) –
QuestionGroup沒有標記爲可序列化(它來自另一個我無法控制的項目) 。我如何將它標記爲不可序列化? – r3plica
嘗試使用屬性[NonSerialized]裝飾字段。如果您需要跨不同消息使用該問題組,則可能會導致您將其引入功能中的其他問題,但會看到 –