これは、私たちが取り組んでいるカスタム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>
。