/// <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)); }
/// <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)); } }
/// <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); }
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; } } }