データレイヤーには、すべてのエンティティを含むL2Sqlアセンブリがあります。これらのエンティティは、主に相互に関連しています。問題は、内部開発標準のため、オブジェクトインスタンスが作成されたら、特定のプロパティを特定の値に設定したいということです。
私の考えは、関連するオブジェクト(Person.ContactDetails.Address)を再帰的にスキャンし、プロパティ値を設定してから、さらに処理するために親オブジェクト(Person)を返すことです。
再帰を実行していますが、残念ながら、Personではなくheirachy(アドレス)の最後の子のみが返されるようです。
これが私のコードです:
private Type SetDefaultTypeValues(Type t, object o, Type parentType)
{
Type theType = t;
PropertyInfo[] fields = theType.GetProperties();
foreach (PropertyInfo fi in fields)
{
switch (fi.Name)
{
case "CreateDate":
fi.SetValue(o, DateTime.Now, null);
break;
case "ModifyDate":
fi.SetValue(o, DateTime.Now, null);
break;
case "Active":
fi.SetValue(o, true, null);
break;
default:
if (fi.PropertyType == typeof(DateTime))
{
fi.SetValue(o, new DateTime(1900, 01, 01, 12, 0, 0), null);
}
break;
}
if (fi.PropertyType.FullName.StartsWith("whatever.arme.Domain.Entities") && fi.PropertyType != parentType) // This is to ignore properties of the child which contain Parent references
{
var obj = fi.GetValue(o, null);
if (obj == null)
obj = Assembly.GetAssembly(theType).CreateInstance(fi.PropertyType.FullName);
theType = SetDefaultTypeValues(fi.PropertyType, obj, theType); // I imagine the problem lies between here...
}
}
return theType; // ... and here?
}
親オブジェクトが元の呼び出し元に戻らず、代わりに別のタイプのオブジェクトを返すのはなぜですか?