我有一个Entity类型,它是这样声明的开放类型:
public class PseudoValue
{
public string Value { get; set; }
}
public class Entity
{
[Key]
public ulong Id { get; set; }
public IDictionary<string, object> DynamicProperties { get; set; }
}
在此过程中的某处,我向我的实体添加了一个动态属性,如下所示:
propertiesMap.TryAdd("explicitAdd", new PseudoValue { Value = "Types" });
当我尝试像这样查询我的数据
~/api/Entities/?$filter=explicitAdd/App.PseudoValue/Value eq 'Types'
我有例外
URI中指定的查询无效。遇到无效的类型转换。无法从“
这似乎源于强制转换无法工作的事实,因为属性explicitAdd
的类型是开放类型,并且正在UriEdmHelpers.cs中从该函数抛出
/// <summary>
/// Check whether the parent and child are properly related types
/// </summary>
/// <param name="parentType">the parent type</param>
/// <param name="childType">the child type</param>
/// <exception cref="ODataException">Throws if the two types are not related.</exception>
public static void CheckRelatedTo(IEdmType parentType, IEdmType childType)
{
if (!IsRelatedTo(parentType, childType))
{
// If the parentType is an open property, parentType will be null and can't have an ODataFullName.
string parentTypeName = (parentType != null) ? parentType.FullTypeName() : "<null>";
throw new ODataException(Strings.MetadataBinder_HierarchyNotFollowed(childType.FullTypeName(), parentTypeName));
}
}
如果相反,我会这样添加我的媒体资源:
propertiesMap.TryAdd("thisWorks", "Types");
此查询成功:
~/api/Entities/?$filter=thisWorks eq 'Types'
有什么办法可以避免类型检查,以便第一个示例可以这样写?
~/api/Entities/?$filter=explicitAdd/Value eq 'Types'