/// <inheritdoc />
        public bool TryGetPropertyValue(string propertyName, out object value)
        {
            // look into the container first to see if it has that property. container would have it
            // if the property was expanded.
            if (Container != null)
            {
                _containerDict = _containerDict ?? Container.ToDictionary(DefaultPropertyMapper, includeAutoSelected: true);
                if (_containerDict.TryGetValue(propertyName, out value))
                {
                    return(true);
                }
            }

            // fall back to the instance.
            if (Instance != null)
            {
                var type     = Instance.GetType();
                var edmodel  = ModelContainer.GetModel(type);
                var edrefect = edmodel.GetEdmTypeReference(type);

                _typedEdmEntityObject = _typedEdmEntityObject ??
                                        new TypedEdmEntityObject(Instance, /*GetEdmType()*/ edrefect as IEdmEntityTypeReference, edmodel /*GetModel()*/);

                return(_typedEdmEntityObject.TryGetPropertyValue(propertyName, out value));
            }

            value = null;
            return(false);
        }
Beispiel #2
0
        /// <inheritdoc />
        public bool TryGetPropertyValue(string propertyName, out object value)
        {
            // look into the container first to see if it has that property. container would have it
            // if the property was expanded.
            if (Container != null)
            {
                _containerDict = _containerDict ?? Container.ToDictionary(DefaultPropertyMapper, includeAutoSelected: true);
                if (_containerDict.TryGetValue(propertyName, out value))
                {
                    return(true);
                }
            }

            // fall back to the instance.
            if (UseInstanceForProperties && UntypedInstance != null)
            {
                _typedEdmEntityObject = _typedEdmEntityObject ??
                                        new TypedEdmEntityObject(UntypedInstance, GetEdmType() as IEdmEntityTypeReference, GetModel());

                return(_typedEdmEntityObject.TryGetPropertyValue(propertyName, out value));
            }

            value = null;
            return(false);
        }
        public void TryGetValue_ReturnsFalse_IfInstanceIsNull()
        {
            // Arrange
            IEdmEntityTypeReference edmType = new Mock <IEdmEntityTypeReference>().Object;
            IEdmModel            edmModel   = new Mock <IEdmModel>().Object;
            TypedEdmEntityObject edmObject  = new TypedEdmEntityObject(instance: null, edmType: edmType, edmModel: edmModel);
            object value;

            // Act & Assert
            Assert.False(edmObject.TryGetPropertyValue("property", out value));
            Assert.Null(value);
        }
        public void GetEdmType_Returns_InitializedEdmType()
        {
            // Arrange
            IEdmEntityTypeReference edmType = new Mock <IEdmEntityTypeReference>().Object;
            IEdmModel            edmModel   = new Mock <IEdmModel>().Object;
            TypedEdmEntityObject edmObject  = new TypedEdmEntityObject(42, edmType, edmModel);

            // Act
            IEdmTypeReference result = edmObject.GetEdmType();

            // Assert
            Assert.Same(edmType, result);
        }
        public void Ctor_InitializesProperty_Instance()
        {
            // Arrange
            object instance = new object();
            IEdmEntityTypeReference edmType = new Mock <IEdmEntityTypeReference>().Object;
            IEdmModel edmModel = new Mock <IEdmModel>().Object;

            // Act
            TypedEdmEntityObject edmObject = new TypedEdmEntityObject(instance, edmType, edmModel);

            // Assert
            Assert.Same(instance, edmObject.Instance);
        }
        public void TryGetValue_ReturnsFalse_IfPropertyIsNotPresent()
        {
            // Arrange
            TestEntity instance = new TestEntity {
                Property = new object()
            };
            Mock <IEdmEntityTypeReference> mockEdmType = new Mock <IEdmEntityTypeReference>();

            mockEdmType.Setup(t => t.Definition).Returns(new Mock <IEdmStructuredType>().Object);
            IEdmEntityTypeReference edmType = mockEdmType.Object;
            IEdmModel            edmModel   = new Mock <IEdmModel>().Object;
            TypedEdmEntityObject edmObject  = new TypedEdmEntityObject(instance, edmType, edmModel);
            object value;

            // Act & Assert
            Assert.False(edmObject.TryGetPropertyValue("NotPresentProperty", out value));
            Assert.Null(value);
        }
Beispiel #7
0
        private object BuildEntityInstance()
        {
            if (EdmObject == null)
            {
                return(null);
            }

            TypedEdmEntityObject edmEntityObject = EdmObject as TypedEdmEntityObject;

            if (edmEntityObject != null)
            {
                return(edmEntityObject.Instance);
            }

            var  assemblyNames = Request.HttpContext.RequestServices.GetService <AssembliesResolver>();
            Type clrType       = EdmLibHelpers.GetClrType(EntityType, EdmModel, assemblyNames);

            if (clrType == null)
            {
                throw new InvalidOperationException(Error.Format(SRResources.MappingDoesNotContainEntityType, EntityType.FullName()));
            }

            object resource = Activator.CreateInstance(clrType);

            foreach (IEdmStructuralProperty property in EntityType.StructuralProperties())
            {
                object value;
                if (EdmObject.TryGetPropertyValue(property.Name, out value) && value != null)
                {
                    if (value.GetType().IsCollection())
                    {
                        DeserializationHelpers.SetCollectionProperty(resource, property, value, property.Name, assemblyNames);
                    }
                    else
                    {
                        DeserializationHelpers.SetProperty(resource, property.Name, value);
                    }
                }
            }

            return(resource);
        }