对于我的数据层,我有一个包含我所有实体的 L2Sql 程序集。这些实体大多相互关联。问题在于,由于我们的内部开发标准,我们希望在创建对象实例后将某些属性设置为特定值。
我的想法是递归扫描我的相关对象(Person.ContactDetails.Address),设置属性值,然后返回父对象(Person)以进行进一步处理。
我已经进行了递归,但不幸的是,它似乎只返回 heirachy(地址)中的最后一个孩子而不是 Person。
这是我的代码:
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?
}
为什么我的父对象没有返回给原始调用者,而是返回不同类型的对象?