![](/img/trans.png)
[英]How to access loaded data within an entity framework model's partial class
[英]Bot Framework - how to access entity defined in partial class
我导出了我的 LUIS 应用程序内容 (.json) 并使用bf luis:generate:cs
命令从中生成了 a.cs 代码:
public partial class AssistantRootDialog: IRecognizerConvert
{
并编写了另一个部分 class 以更好(命名)方式访问实体
public partial class AssistantRootDialog
{
public String PhoneUser => Entities?.ContactName?.FirstOrDefault() ?? "<no user>";
...
}
在我的自适应对话框中,我将 LUI 识别的意图和实体设置如下:
new OnIntent(nameof(AssistantRootDialog.Intent.LookForMobilePhone)) {
Actions = new List<Dialog>() {
new SetProperty() {
Property = "conversation.find.phone.userName",
Value = "=turn.recognized.Entities?.ContactName[0]"
},
我想知道如何使用部分 class 中的PhoneUser
属性:
new SetProperty() {
Property = "conversation.find.phone.userName",
Value = "=turn.recognized.PhoneNumber" // It seems wrong !! ??
},
任何想法? 提前致谢...
只是为了设置一点上下文,您必须记住,自适应对话和传统对话存在于不同的领域,并且您以不同的方式使用它们。
您可以使用自适应对话框中的传统对话框,但您不能(或者至少我还没有弄清楚如何)以相反的方式进行操作。
自适应对话框是声明性的,由DialogManager
管理,而传统对话框是命令式的,主要由您的代码管理。
您可以使用CodeAction
对话框在自适应对话框定义中添加自定义代码,并访问在自适应属性分配中定义的任何属性。 因此,您可以在SetProperty()
操作之后定义此代码操作:
new CodeAction(async (dialogContext, options) =>
{
// this is the way to get a value from adaptive dialog's state, you can "deserialize" to whatever type
var userName = dialogContext.State.GetValue<string>("conversation.find.phone.userName");
// you can also set any property and use it later from any adaptive expression
dialogContext.State.SetValue("conversation.find.phone.firstName", userName.Split()[0]);
return await dialogContext.EndDialogAsync(options);
}),
能够获取和设置属性并在“另一边”使用它们。
无论如何,我不确定这是否能实现您想要实现的目标,但至少是一种在两个“现实”之间传递价值的方式。
更新:几天前我在我的博客上发表了一篇文章,这可能有助于自适应对话,特别是在测试部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.