コード例 #1
0
        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);
            }
        }
コード例 #2
0
 public bool SameObject(DataObject obj) => DataObject.SameObjects(this, obj);