private void AssignValue(object value, bool isLoading) { bool isAggregation = this.Metadata.IsAggregation; DataObject dataObject1 = !isAggregation || !this.IsAssigned ? (DataObject)null : (DataObject)this.GetValue(); MetadataAssociationRef metadataAssociationRef1 = (MetadataAssociationRef)null; DataObject dataObject2 = (DataObject)value; if (!isLoading) { dataObject2 = this.Session.EnsureSessionObject(dataObject2); } if (DataObject.Assigned(dataObject2)) { metadataAssociationRef1 = this.Metadata.Association.Refs.Find(dataObject2.Class); if (metadataAssociationRef1 == null) { throw new DataException(string.Format("Попытка присвоить объект '{0}' свойству '{1}' объекта '{2}'", (object)dataObject2.Class.Name, (object)this.Metadata.Name, (object)this.Object.Class.Name)); } } else { dataObject2 = (DataObject)null; } base.SetValue((object)dataObject2); if (!isAggregation || DataObject.SameObjects(dataObject2, dataObject1)) { return; } if (DataObject.Assigned(dataObject1)) { MetadataAssociationRef metadataAssociationRef2 = this.Metadata.Association.Refs.Need(dataObject1.Class); dataObject1.GetChilds(metadataAssociationRef2.OwnerChildRef).DetachChild(this.Object, isLoading); } if (DataObject.Assigned(dataObject2)) { dataObject2.GetChilds(metadataAssociationRef1.OwnerChildRef).AttachChild(this.Object, isLoading); } }
public bool SameObject(DataObject obj) => DataObject.SameObjects(this, obj);