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)); } }
/// <summary> /// 清空并标识,将删除实体集中的所有对象。 /// </summary> /// <param name="value"></param> internal static void SetEntitySetToNull(PropertyValue value) { if (value.IsNullOrEmpty()) { return; } value.GetStorageValue().As <IEntitySetInternalExtension>(e => e.IsNeedClear = true); }
/// <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)); }
internal static object GetValueSafely(PropertyValue value) { if (value == null || value.IsEmpty) { return(null); } return(value.GetStorageValue()); }
/// <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); } }
/// <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); }
public override void SetValue(IProperty property, PropertyValue value) { base.SetValue(property, value); property.Info.ReflectionInfo.SetValue(this, value.GetStorageValue(), null); }