使用 DynamicObjects 作为文档创建 Azure 搜索索引
Creating Azure Search Index with DynamicObjects as documents
我正在尝试上传一系列文档,属于派生自 DynamicObject 的 class。我需要这样做是因为索引字段在重新创建索引时可能会更改。创建索引一切正常,但是,在上传文档时,抛出错误:
Microsoft.Rest.Azure.CloudException: 'The request is invalid. Details: actions : 0: Document key cannot be missing or empty.
这对我来说没有任何意义,因为索引包含一个将 IsKey 标志设置为 true 的字段,而且文档也正确设置了相应的字段。还值得一提的是,如果我注释掉从 DynamicObject 派生文档 class 的代码,一切正常。
有人遇到过这种情况吗?非常感谢!
由于您的文档类型继承自 DynamicObject,因此我假设您同时具有静态属性和动态属性。确保文档对象被正确序列化。
为此,您可以将 GetDynamicMemberNames 方法重写为 return 动态和静态属性的名称。下面的代码应该可以解决问题:
public override IEnumerable<string> GetDynamicMemberNames()
{
return base.GetDynamicMemberNames().Concat(this.GetType().GetProperties().Select(p => p.Name));
}
我正在尝试上传一系列文档,属于派生自 DynamicObject 的 class。我需要这样做是因为索引字段在重新创建索引时可能会更改。创建索引一切正常,但是,在上传文档时,抛出错误:
Microsoft.Rest.Azure.CloudException: 'The request is invalid. Details: actions : 0: Document key cannot be missing or empty.
这对我来说没有任何意义,因为索引包含一个将 IsKey 标志设置为 true 的字段,而且文档也正确设置了相应的字段。还值得一提的是,如果我注释掉从 DynamicObject 派生文档 class 的代码,一切正常。
有人遇到过这种情况吗?非常感谢!
由于您的文档类型继承自 DynamicObject,因此我假设您同时具有静态属性和动态属性。确保文档对象被正确序列化。
为此,您可以将 GetDynamicMemberNames 方法重写为 return 动态和静态属性的名称。下面的代码应该可以解决问题:
public override IEnumerable<string> GetDynamicMemberNames()
{
return base.GetDynamicMemberNames().Concat(this.GetType().GetProperties().Select(p => p.Name));
}