Beispiel #1
0
        async Task SaveOneToOne(ComplexPropertyDescriptor navPropertyDescriptor, object owner, TypeDescriptor ownerTypeDescriptor, bool @async)
        {
            /*
             * 1:1
             * T    <1:1>    TOther
             * T.TOther <--> TOther.T
             * T.Id <--> TOther.Id
             */

            //owner is T
            //navPropertyDescriptor is T.TOther
            //TypeDescriptor of T.TOther
            TypeDescriptor navTypeDescriptor = EntityTypeContainer.GetDescriptor(navPropertyDescriptor.PropertyType);
            //TOther.T
            ComplexPropertyDescriptor TOtherDotT = navTypeDescriptor.ComplexPropertyDescriptors.Where(a => a.PropertyType == ownerTypeDescriptor.Definition.Type).FirstOrDefault();

            bool isOneToOne = TOtherDotT != null;

            if (!isOneToOne)
            {
                return;
            }

            //instance of T.TOther
            object navValue = navPropertyDescriptor.GetValue(owner);

            if (navValue == null)
            {
                return;
            }

            //T.Id
            PrimitivePropertyDescriptor foreignKeyProperty = navPropertyDescriptor.ForeignKeyProperty;

            if (foreignKeyProperty.IsAutoIncrement || foreignKeyProperty.HasSequence())
            {
                //value of T.Id
                object foreignKeyValue = foreignKeyProperty.GetValue(owner);

                //T.TOther.Id = T.Id
                TOtherDotT.ForeignKeyProperty.SetValue(navValue, foreignKeyValue);
            }

            MethodInfo saveMethod = GetSaveMethod(navPropertyDescriptor.PropertyType);
            //DbContext.Save(navValue, ownerTypeDescriptor, @async);
            Task  task = (Task)saveMethod.Invoke(this, navValue, ownerTypeDescriptor, @async);
            await task;
        }
		bool CanMoveSelectedRowsToGroup(DragDropManagerBase sourceManager, GroupInfo[] groupInfos, DependencyObject hitElement) {
			if(GetRowElement(hitElement) == null)
				return false;
			foreach(object obj in sourceManager.DraggingRows) {
				if(!ItemsSource.Contains(obj))
					return true;
				foreach(GroupInfo groupInfo in groupInfos) {
					object value;
					if(groupInfo.FieldName.Contains(".")) {
						ComplexPropertyDescriptor complexDescr = new ComplexPropertyDescriptor(obj, groupInfo.FieldName);
						value = complexDescr.GetValue(obj);
					} else
						value = TypeDescriptor.GetProperties(obj)[groupInfo.FieldName].GetValue(obj);
					if(!object.Equals(value, groupInfo.Value))
						return true;
				}
			}
			return false;
		}