コード例 #1
0
        /// <summary>
        /// 获取指定属性的值。
        /// </summary>
        /// <param name="property">实体属性。</param>
        /// <returns></returns>
        public virtual PropertyValue GetValue(IProperty property)
        {
            if (property == null)
            {
                return(PropertyValue.Empty);
            }

            var hasValue = InnerEntry.Has(property.Name);
            var value    = PropertyValue.Empty;

            if (hasValue)
            {
                value = InnerEntry[property.Name].GetCurrentValue();
            }
            else if (property.Type.IsValueType)
            {
                value = PropertyValue.NewValue(property.Type.GetDefaultValue(), property.Type);
            }

            //关联属性
            if (!hasValue && property is RelationProperty)
            {
                value = ProcessSupposedProperty(property);
            }

            return(EntityUtility.CheckReturnValue(property, value));
        }
コード例 #2
0
        /// <summary>
        /// 设置指定属性的值。
        /// </summary>
        /// <param name="property">实体属性。</param>
        /// <param name="value">要设置的值。</param>
        public virtual void SetValue(IProperty property, PropertyValue value)
        {
            //如果赋值相同则忽略更改
            if (CheckValueEquals(property, value, out PropertyValue oldValue))
            {
                return;
            }

            //验证属性值
            //ValidationUnity.Validate(this, property, value);
            EntityUtility.CheckPrimaryProperty(this, property);

            if (CheckPropertyChangingIsCanceled(property, value, oldValue))
            {
                return;
            }

            CheckEntitySetDestroy(property, oldValue, value);
            InternalSetValue(property, value);
            EntityUtility.UpdateFromReference(property, this, value);
            this.As <IEntityRelation>(s => s.NotifyModified(property.Name));

            if (PropertyChanged != null)
            {
                OnPropertyChanged(new PropertyChangedEventArgs(property, oldValue, value));
            }
        }
コード例 #3
0
        /// <summary>
        /// 将关联属性的值设为 null。
        /// </summary>
        /// <param name="property"></param>
        private bool SetNullable(IProperty property)
        {
            var relationPro = property.As <RelationProperty>();

            if (relationPro == null)
            {
                return(false);
            }

            var oldValue = CheckAndLazyPropertyValue(property);

            if (oldValue == null)
            {
                return(false);
            }

            switch (relationPro.RelationalPropertyType)
            {
            case RelationPropertyType.Entity:
                EntityUtility.SetEntityToNull(oldValue);
                break;

            case RelationPropertyType.EntitySet:
                EntityUtility.SetEntitySetToNull(oldValue);
                break;
            }

            return(true);
        }
コード例 #4
0
        private void UpdateRelations(IEntity entity)
        {
            var entityEx = entity.As <IEntityStatefulExtension>();

            if (entityEx == null)
            {
                return;
            }

            var relProperties = PropertyUnity.GetRelatedProperties(entity.EntityType);

            foreach (var property in relProperties)
            {
                var relationPro = property as RelationProperty;
                var value       = entityEx.GetDirectValue(property);
                if (value == null)
                {
                    continue;
                }

                switch (relationPro.RelationPropertyType)
                {
                case RelationPropertyType.EntitySet:
                    var list = PropertyValueHelper.GetValue <IEnumerable>(value);
                    EntityUtility.AttachPrimaryKeyValues(entity, relationPro, list);
                    Save(list);
                    break;

                case RelationPropertyType.Entity:
                    SaveRelationEntity(PropertyValueHelper.GetValue <IEntity>(value));
                    break;
                }
            }
        }