これは、私たちが取り組んでいるカスタムORMです。それは素晴らしいことではありませんが、それは私たちがやることに決めたものです。
基本的に、基本クラスEntityは他の任意の数のクラスによって拡張されます。これらの子クラスには、属性を使用して注釈を付ける必要があります。
コレクションという特定のタイプの属性があります。この属性は、コレクションのサブタイプを定義します。
例えば。
public class Blah2 : Entity
{
...
}
public class Blah : Entity
{
[QRel(Type = typeof(Blah2)]
public IEnumerable<Blah2> blahs;
}
これらの子オブジェクトのロードは簡単に実行できますが、基本タイプとしてロードされEntityます。
リフレクションを介して、実行時にORMマネージャーで次のようになります。
- 属性でマークされたタイプ:
Type t - 何とかフィールド情報:
FieldInfo f - タイプのエンティティインスタンス
Blah:i Blah2インスタンスのセットを含む一般的なロード済みリスト:List<Entity> l
lt派生タイプを使用してリストを作成しt(つまり、動的に作成して入力しList<Blah2>)、タイプのフィールドに割り当てる必要がありますBlah。
var lt = ...
f.SetValue(i, lt);
これはすべてリフレクションを介して行われるため、私が持っているオブジェクトのタイプtは-> Type、i-> Entity、f-> FieldInfo、l- >であることに注意してくださいList<Entity>。