EF 4.1 では、タグごとにすべてのエンティティ、またはエンティティごとにすべてのタグを照会できる、ある種のタグ付けシステムを構築する必要があります。これが私のモデルの簡略化されたスナップショットです。
public abstract class BaseEntity {
[Required]
[Key]
public Guid ID { get; set; }
}
public class Tag : BaseEntity {
// tag subscribers
public List<King> Kings { get; set; }
public List<Knight> Knights { get; set; }
public List<Peasant> Peasants { get; set; }
}
public class King : BaseEntity {
public string Title { get; set; }
public List<Tag> Tags { get; set; }
}
public class Knight : BaseEntity {
public string Title { get; set; }
public List<Tag> Tags { get; set; }
}
public class Peasant : BaseEntity {
public string Title { get; set; }
public List<Tag> Tags { get; set; }
}
(ええ、ここではキング、ナイト、ペザントが同じであることは知っています。しかし、メッセンジャーがモンティ・パイソン・アンド・ホーリー・グレイルで言っているように、「それは単なるモデルです.」)
とにかく、このモデルはうまく機能しますが、私は特定のキャストよりも T ジェネリック リストを好みます。データベース内のテーブルが少なくなり、タグからエンティティにクエリを実行する際のオーバーヘッドが少なくなります。Tag 内のすべての List<Entity> プロパティを、T : BaseEntity である単一の汎用 List<T> に変換するにはどうすればよいでしょうか。これにより、特定の派生物に対してクエリを実行できる単一のルックアップ テーブルが生成されますか? 何かのようなもの:
List<Knight> knightsByTag = Tags.Where(t => t.GetType() == typeof (Knight)).ToList();
編集:はい。申し訳ありませんが、実際のコードの一部がまだそこにありました。
@ダース・ベイダー:
- 現在 3 つのリスト プロパティの代わりに 1 つのリスト プロパティを使用するタグを希望します。
- 騎士に関連付けられたすべてのタグ、またはタグに関連付けられたすべての農民などを照会できるようにしたいと考えています。
- できればルックアップ テーブルを使用して、EF CodeFirst がジェネリック リストを正確に解決できるようにしたいと考えています。