Added fix for recursion bubbling back due to not set subAttribute
This commit is contained in:
		
							parent
							
								
									111b3bf7ce
								
							
						
					
					
						commit
						4f7495ea68
					
				@ -286,8 +286,32 @@ namespace eu.railduction.netcore.dll.Database_Attribute_System
 | 
				
			|||||||
                // When its empty, get it & set it
 | 
					                // When its empty, get it & set it
 | 
				
			||||||
                if(foreignObject_value == null)
 | 
					                if(foreignObject_value == null)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
 | 
					                    // Resolve it
 | 
				
			||||||
                    foreignObject_value = GetByPrimaryKey<T>(classType, foreignObjectAtt.foreignKeyAttribute.parentField.GetValue(classObject), queryExecutor);
 | 
					                    foreignObject_value = GetByPrimaryKey<T>(classType, foreignObjectAtt.foreignKeyAttribute.parentField.GetValue(classObject), queryExecutor);
 | 
				
			||||||
                    foreignObjectAtt.parentField.SetValue(classObject, foreignObject_value);
 | 
					                    foreignObjectAtt.parentField.SetValue(classObject, foreignObject_value);    // Set the value
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    // Now scan the just resolved class to be able to set myself
 | 
				
			||||||
 | 
					                    DbObject foreignDbObject = Init(foreignObject_value.GetType());
 | 
				
			||||||
 | 
					                    foreach(DbReverseForeignObject dbReverseForeignObject in foreignDbObject.reverseForeignObjectAttributes)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        // If the field-names match
 | 
				
			||||||
 | 
					                        if(dbReverseForeignObject._foreignKeyName.ToLower() == dbObject.primaryKeyAttributes[0]._attributeName.ToLower())
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            object myReference;
 | 
				
			||||||
 | 
					                            if (dbReverseForeignObject.parentField.FieldType is IList && dbReverseForeignObject.parentField.FieldType.IsGenericType)  // 1:m
 | 
				
			||||||
 | 
					                            {
 | 
				
			||||||
 | 
					                                // If its a list, i create a list with just myself
 | 
				
			||||||
 | 
					                                myReference = new List<T>() { classObject };
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                            else    // 1:1
 | 
				
			||||||
 | 
					                            {
 | 
				
			||||||
 | 
					                                // Otherwise ist just myself
 | 
				
			||||||
 | 
					                                myReference = classObject;
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                            dbReverseForeignObject.parentField.SetValue(foreignObject_value, myReference);
 | 
				
			||||||
 | 
					                            break;
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                // Recursive resolving
 | 
					                // Recursive resolving
 | 
				
			||||||
@ -302,6 +326,7 @@ namespace eu.railduction.netcore.dll.Database_Attribute_System
 | 
				
			|||||||
            foreach (DbReverseForeignObject reverseForeignObjectAtt in dbObject.reverseForeignObjectAttributes)
 | 
					            foreach (DbReverseForeignObject reverseForeignObjectAtt in dbObject.reverseForeignObjectAttributes)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                object reverseForeignObject_value = reverseForeignObjectAtt.parentField.GetValue(classObject);
 | 
					                object reverseForeignObject_value = reverseForeignObjectAtt.parentField.GetValue(classObject);
 | 
				
			||||||
 | 
					                Type reverseForeignObject_type = reverseForeignObjectAtt.parentField.GetType();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                // When its empty, get it & set it
 | 
					                // When its empty, get it & set it
 | 
				
			||||||
                if (reverseForeignObject_value == null)
 | 
					                if (reverseForeignObject_value == null)
 | 
				
			||||||
@ -314,15 +339,30 @@ namespace eu.railduction.netcore.dll.Database_Attribute_System
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                    if(values.Count == 0) throw new InvalidOperationException($"'{reverseForeignObjectAtt.parentField.Name}' could not been resolved. ReverseForeignObject returned '{values.Count}' values.");
 | 
					                    if(values.Count == 0) throw new InvalidOperationException($"'{reverseForeignObjectAtt.parentField.Name}' could not been resolved. ReverseForeignObject returned '{values.Count}' values.");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    // Now scan the just resolved class to be able to set myself
 | 
				
			||||||
 | 
					                    DbObject foreignDbObject = Init(reverseForeignObjectAtt.foreignKeyAttribute.classAttribute.parentClassType);
 | 
				
			||||||
 | 
					                    foreach (DbForeignObject dbForeignObject in foreignDbObject.foreignObjectAttributes)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        // If the field-names match
 | 
				
			||||||
 | 
					                        if (dbForeignObject._foreignKeyName.ToLower() == dbObject.primaryKeyAttributes[0]._attributeName.ToLower())
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            object myReference = classObject;
 | 
				
			||||||
 | 
					                            foreach(object value in values)
 | 
				
			||||||
 | 
					                            {
 | 
				
			||||||
 | 
					                                dbForeignObject.parentField.SetValue(value, myReference);
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                            break;
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    // Check for type to determen 1:1 or 1:m
 | 
					                    // Check for type to determen 1:1 or 1:m
 | 
				
			||||||
                    Type reverseForeignObject_type = reverseForeignObjectAtt.parentField.GetType();
 | 
					 | 
				
			||||||
                    if (reverseForeignObject_type is IList && reverseForeignObject_type.IsGenericType)  // List, so 1:m
 | 
					                    if (reverseForeignObject_type is IList && reverseForeignObject_type.IsGenericType)  // List, so 1:m
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        reverseForeignObject_value = values;
 | 
					                        reverseForeignObject_value = values;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    else    // Not list, so 1:1
 | 
					                    else    // Not list, so 1:1
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        if (values.Count > 1) throw new InvalidOperationException($"'{reverseForeignObjectAtt.parentField.Name}' could not been resolved as ReverseForeignObject returned '{values.Count}' values. (Is it 1:1 instead of 1:m?)");
 | 
					                        if (values.Count > 1) throw new InvalidOperationException($"'{reverseForeignObjectAtt.parentField.Name}' could not been resolved as ReverseForeignObject returned '{values.Count}' values. (Is it 1:m instead of 1:1?)");
 | 
				
			||||||
                        reverseForeignObject_value = values[0];
 | 
					                        reverseForeignObject_value = values[0];
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    reverseForeignObjectAtt.parentField.SetValue(classObject, reverseForeignObject_value);
 | 
					                    reverseForeignObjectAtt.parentField.SetValue(classObject, reverseForeignObject_value);
 | 
				
			||||||
@ -331,7 +371,7 @@ namespace eu.railduction.netcore.dll.Database_Attribute_System
 | 
				
			|||||||
                // Recursive resolving
 | 
					                // Recursive resolving
 | 
				
			||||||
                if (max_depth > 1)
 | 
					                if (max_depth > 1)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    if (reverseForeignObject_value is IList)  // 1:m
 | 
					                    if (reverseForeignObject_value is IList && reverseForeignObject_type.IsGenericType)  // 1:m
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        // If we have a list of objects, we need to recursively go into each one
 | 
					                        // If we have a list of objects, we need to recursively go into each one
 | 
				
			||||||
                        foreach(object value in (IList)reverseForeignObject_value)
 | 
					                        foreach(object value in (IList)reverseForeignObject_value)
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user