这是我们正在处理的自定义 ORM 事情。这不是很棒,但这是我们决定要做的。
基本上,基类Entity由任意数量的其他类扩展。这些子类必须使用属性进行注释。
有一种特定类型的属性是集合。该属性定义了集合的子类型。
例如。
public class Blah2 : Entity
{
...
}
public class Blah : Entity
{
[QRel(Type = typeof(Blah2)]
public IEnumerable<Blah2> blahs;
}
加载这些子对象很容易,但它们是作为基本类型加载的,Entity.
通过反射,所以在运行时我在 ORM 管理器中:
- 属性中标注的类型:
Type t - blahs 的字段信息:
FieldInfo f - 类型的实体实例
Blah:i - 包含一组
Blah2实例的通用加载列表:List<Entity> l
我需要lt使用派生类型创建一个列表t(即动态创建和填充 a List<Blah2>)并将其分配给 type 字段Blah:
var lt = ...
f.SetValue(i, lt);
请注意,因为这都是通过反射完成的,所以我拥有的对象的类型是:t-> Type,i-> Entity,f-> FieldInfo,l-> List<Entity>。