Как я могу получить доступ к свойству сложного типа в odata 4 открытого типа? - PullRequest
0 голосов
/ 19 марта 2019

У меня есть тип 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; }
    }

где-то по пути, я добавляю динамическое свойство к моему Entity следующим образом:

propertiesMap.TryAdd("explicitAdd", new PseudoValue { Value = "Types" });

Когда я пытаюсь запросить мои данные следующим образом

~/api/Entities/?$filter=explicitAdd/App.PseudoValue/Value eq 'Types'

я получаю исключение

Запрос, указанный в URI, недопустим.Обнаружен неверный тип приведения.«App.PseudoValue» нельзя назначить из «».

Похоже, это связано с тем, что приведение не может работать, потому что тип свойства 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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...