私はTPHコードの最初のtmodelを作成し、必要な弁別子列にNotMappedAttributeを追加しました。私はサブクラスのために自分のコンテキストにDbSetsを追加することができ、これらの型付きセットでクエリを実行することができます。最初のコード:Discriminatorによるクエリ。私は知っている、私は必要があるとは思わない
しかし、私は、それ自体がBaseTypeのコレクションを含んでいるエンティティを持っているとします。そのうちのいくつかは1つのタイプかもしれません。型付きレコードを取得するためのクエリを作成するにはどうすればよいですか?私は怠け者の読み込み中のメモリ内のコレクションでこれを望んでいません。
Associationと呼ばれるクラスとAssocAとAssocBといういくつかのサブクラスがあり、それらはすべてAssociationsテーブルにマップされ、AssocationTypeIdで区別されます。 あなたはエンティティを持っていると仮定します - 引数としてEmployeeと呼んでください。ですから、例えば
class Employee
{
public virtual Collection<Associations> MyAssociations {get;set;}
}
のために今、私は= AssocAを持つ従業員を見つけるために、データベースを照会したいですか?。私はどんな団体も同等であることを望んでいないのですか?特定の型付けされた関連付けです。私はGetTypeを使うことができません。なぜなら、LinqToEntitiesはそれに対応できないからです。私は、AttributeTypeIdをコードの最初のマッピングで使用しているため、これを使用できません。
何が欠けていますか?私がやっていることは妥当です。しかし、私はそれをモデル化することはできません。
var query = from e in context.Employees
where e.MyAssociations.OfType<AssocA>().Any()
select e;
これはタイプAssocA
の少なくとも一つの関連性を持っている唯一の従業員を見つける: