2

TPH コード ファースト tmodel を作成し、必要な識別子列に NotMappedAttribute を追加しました。サブクラスのコンテキストに DbSet を追加し、これらの型付きセットによってクエリを実行できます。コード ファーストは今でも私の友人です。

ただし、それ自体が BaseType のコレクションを含むエンティティがあり、そのうちのいくつかはあるタイプであり、別のタイプであるとします。型指定されたレコードを取得するクエリを作成するにはどうすればよいですか? ちなみに、遅延ロードされたメモリ内コレクションではこれを行いたくありません。

Association という名前のクラスと、いくつかのサブクラス AssocA および AssocB があるとします。これらはすべて Associations テーブルにマップされ、AssocationTypeId で識別されます。ここでエンティティがあると仮定します - 引数のためにそれを Employee と呼びます。たとえば

class Employee
{
  public virtual Collection<Associations> MyAssociations {get;set;}
}

データベースにクエリを実行して、AssocA = ? の従業員を検索します。関連付けを ? に等しくしたくないだけです。しかし、特定の型付けされた関連付け。LinqToEntities が動作しないため、GetType を使用できません。コード最初のマッピングで使用されるため、AttributeTypeId は使用できません。

私は何が欠けていますか?私がしていることは合理的です。しかし、私はそれをモデル化することはできません。

4

1 に答える 1

5

OfType演算子はおそらくあなたが探しているものです:

var query = from e in context.Employees
            where e.MyAssociations.OfType<AssocA>().Any()
            select e;

これにより、 type の関連付けが少なくとも 1 つある従業員のみが検索されますAssocA

于 2012-01-23T13:05:28.097 に答える