public DataProperty SelectSingleProperty(string path)
        {
            DataObject dataObject = this;
            int        startIndex = 0;

            while (true)
            {
                if (DataObject.Assigned(dataObject))
                {
                    int num = path.IndexOf('.', startIndex);
                    if (num >= 0)
                    {
                        string           memberName = path.Substring(startIndex, num - startIndex);
                        MetadataProperty property;
                        MetadataChildRef childRef;
                        dataObject.Class.NeedMember(memberName, out property, out childRef);
                        if (property != null)
                        {
                            dataObject = ((LinkProperty)dataObject[property]).Value;
                        }
                        else
                        {
                            DataObjectChildList childs = dataObject.GetChilds(childRef);
                            if (childs.Count != 0)
                            {
                                dataObject = childs[0];
                            }
                            else
                            {
                                goto label_6;
                            }
                        }
                        startIndex = num + 1;
                    }
                    else
                    {
                        goto label_9;
                    }
                }
                else
                {
                    break;
                }
            }
            return((DataProperty)null);

label_6:
            return((DataProperty)null);

label_9:
            if (startIndex > 0)
            {
                path = path.Substring(startIndex);
            }
            return(dataObject[path]);
        }
 public static bool SameObjects(DataObject obj1, DataObject obj2)
 {
     if (object.ReferenceEquals((object)obj1, (object)obj2))
     {
         return(true);
     }
     if (!DataObject.Assigned(obj1))
     {
         return(!DataObject.Assigned(obj2));
     }
     return(!DataObject.Assigned(obj2) ? !DataObject.Assigned(obj1) : obj1.Id == obj2.Id);
 }
Beispiel #3
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);
            }
        }