对于我的数据层,我有一个L2Sql程序集,其中包含我的所有实体。这些实体大多是相互关联的。问题在于,由于我们的内部开发标准,我们希望在创建对象实例后将某些属性设置为特定值。
我的想法是递归扫描我的相关对象(Person.ContactDetails.Address),设置属性值,然后返回父对象(Person)以进行进一步处理。
我已经进行了递归,但遗憾的是它似乎只返回了heirachy(Address)中的最后一个孩子而不是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?
}
为什么我的父对象没有返回到原始调用者,而是返回不同类型的对象?
答案 0 :(得分:0)
您应该返回t
而不是theType
,因为当您为某个媒体资源调用时,您会使用theType
的返回值覆盖SetDefaultTypeValues
。