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