Example #1
0
        internal static void UpdateFromReference(IProperty property, IEntity entity, PropertyValue value)
        {
            var relationPro = property.As <RelationProperty>();

            if (relationPro == null || value.IsNullOrEmpty() ||
                relationPro.RelationPropertyType != RelationPropertyType.Entity)
            {
                return;
            }
            var refEntity   = value.GetStorageValue().As <IEntity>();
            var relationKey = RelationshipUnity.GetRelationship(relationPro);

            if (relationKey == null)
            {
                return;
            }
            IEntity descEntity;
            IEntity sourceEntity;

            if (relationKey.Style == RelationshipStyle.One2Many)
            {
                descEntity   = entity;
                sourceEntity = refEntity;
            }
            else
            {
                descEntity   = refEntity;
                sourceEntity = entity;
            }
            foreach (var key in relationKey.Keys)
            {
                descEntity.InternalSetValue(key.OtherProperty, sourceEntity.InternalGetValue(key.ThisProperty));
            }
        }
Example #2
0
 /// <summary>
 /// 清空并标识,将删除实体集中的所有对象。
 /// </summary>
 /// <param name="value"></param>
 internal static void SetEntitySetToNull(PropertyValue value)
 {
     if (value.IsNullOrEmpty())
     {
         return;
     }
     value.GetStorageValue().As <IEntitySetInternalExtension>(e => e.IsNeedClear = true);
 }
Example #3
0
 /// <summary>
 /// 改为移除状态,确定该该实体删除。
 /// </summary>
 /// <param name="value"></param>
 internal static void SetEntityToNull(PropertyValue value)
 {
     if (value.IsNullOrEmpty())
     {
         return;
     }
     value.GetStorageValue().As <IEntity>(entity => entity.SetState(EntityState.Detached));
 }
Example #4
0
        internal static object GetValueSafely(PropertyValue value)
        {
            if (value == null || value.IsEmpty)
            {
                return(null);
            }

            return(value.GetStorageValue());
        }
Example #5
0
        /// <summary>
        /// 检查关联属性的空值,如果属性值已设置为null,则不应显示给客户端。
        /// </summary>
        /// <param name="property">要检查的属性。</param>
        /// <param name="value">属性的值。</param>
        /// <returns></returns>
        internal static PropertyValue CheckReturnValue(IProperty property, PropertyValue value)
        {
            var relationPro = property.As <RelationProperty>();

            if (relationPro == null || value.IsNullOrEmpty())
            {
                return(value);
            }
            switch (relationPro.RelationPropertyType)
            {
            case RelationPropertyType.Entity:
                return(CheckReturnEntityValue(value.GetStorageValue().As <IEntity>(), value));

            case RelationPropertyType.EntitySet:
                return(CheckReturnEntitySetValue(value.GetStorageValue().As <IEntitySetInternalExtension>(), value));

            default:
                return(value);
            }
        }
Example #6
0
        /// <summary>
        /// 检查 EntitySet 里的元素是还被销毁。
        /// </summary>
        /// <param name="property"></param>
        /// <param name="oldValue"></param>
        /// <param name="newValue"></param>
        /// <returns></returns>
        private bool CheckEntitySetDestroy(IProperty property, PropertyValue oldValue, PropertyValue newValue)
        {
            if (!property.Is <EntitySetProperty>())
            {
                return(false);
            }

            if (oldValue == null || oldValue.IsNullOrEmpty())
            {
                oldValue = ProcessSupposedProperty(property);
            }

            if (oldValue != null && !oldValue.IsNullOrEmpty() && !newValue.IsNullOrEmpty())
            {
                var oldSet = oldValue.GetStorageValue() as IEntitySetInternalExtension;
                oldSet.As <IList>(s => s.Clear());
                var newSet = newValue.GetStorageValue() as IEntitySetInternalExtension;
                newSet.ShiftDetachedList(oldSet);
                return(true);
            }

            return(false);
        }
Example #7
0
 public override void SetValue(IProperty property, PropertyValue value)
 {
     base.SetValue(property, value);
     property.Info.ReflectionInfo.SetValue(this, value.GetStorageValue(), null);
 }