0

对于我的数据层,我有一个包含我所有实体的 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?
}

为什么我的父对象没有返回给原始调用者,而是返回不同类型的对象?

4

1 回答 1

0

您应该 returnt而不是,因为当您为属性调用它时,您会用返回值theType覆盖。theTypeSetDefaultTypeValues

于 2013-02-13T09:33:29.657 回答