0

次のように、インストラクターを含むトレーニングクラスを参加者にリンクする既存のデータベースに対してEFを実装することに取り組んでいます

Training
-------------------
ClassId (PK)

TrainingParticipant
-------------------
ParticipantId (PK)
ClassId (FK references Training)
PersonId (FK references Person)
ParticipantRoleId (FK references a role table)

参加者テーブルには、1 ~ 10 人の参加者と 1 人のトレーナーが必要です。(ParticipantRoleId によって区別されます。) データベースの最初の開発から始めて、トレーニングとトレーニング参加者の間の 1 対多の関係をマッピングした edmx とコンテキスト/モデルを生成しました。ただし、生成されたナビゲーション プロパティは、すべての TrainingParticipant エントリのコレクションを返します。

私は常にこのようなクエリをコーディングして、次のように単一のトレーナー参加者のレコードを確認または取得しています。

var trainer = context.TrainingParticipant.Where(p => p.ParticipantRoleId == 17).FirstOrDefault()

var students = context.TrainingParticipant.Where(p => p.ParticipantRoleId == 2)

複雑なクエリでこれらにアクセスしたり、モデルを ui コントロールにデータバインドするときに、より簡単にアクセスできるナビゲーション プロパティが欲しいと思っています。そのようです:

var training = context.Training.Where(t => t.Instructor.Person.FirstName.Contains("John"));

できればテーブルを変更せずに、そのようなナビゲーション プロパティを作成することは可能ですか?

4

1 に答える 1

0

この値を返すだけのこの新しいプロパティのEFエンティティに新しいゲッターを作成するのはどうですか

public class MyEntity{
   public int Id {get;set;}
   public ICollection<OtherThing> Things {get;set;}
   [NotMapped]
   public OtherThing TheOneRealThing 
   {
       get
       {
           return Things.First();
       }
   }
}

これは「実際の」nav プロパティではありませんが、アプリの場合は、おそらく期待どおりに動作します。

于 2013-05-01T01:48:43.060 に答える