1

私はEntityフレームワークを学ぼうとしています。たとえば、次のクラスがあります

class Course
{
  [Key]
  public virtual int CourseID {get; set;}
  public virtual string CourseName {get; set;}
}
class CourseDBContext:DBContext
{
   public DbSet<Course> Courses{get;set;}
}

次に、以下に示すように、Linq を使用してデータベースにクエリを実行できます。

using (CourseDBContext a = new CourseDBContext())
{
  var b = from c in a.Course
          where c.CourseID == 1001
          select c;

  var d = b.FirstOrDefault();
  if(d != null)
    Console.WriteLine(d.CourseName);
}

これはうまくいきます。2番目のクラスを追加すると

class Assignment
{
   [Key]
   public virtual int CourseID {get; set;}
   public virtual int StaffID {get; set;}
}
class AssignmentDBContext:DBContext
{
   public DbSet<Assignment> Assignments{get;set;}
}

さて、Linq を使用して、CourseID = 1001 に関連付けられた CourseName と StaffID を選択して表示するにはどうすればよいでしょうか? 上記の例は不自然なので、テーブルのデザインとフィールドは関係ありません。Entity Framework と Linq を使用して、2 つの異なるデータベース テーブルから 2 つのクラス間でデータをクエリする方法を知りたいだけです。

ありがとう

4

2 に答える 2

3

両方のエンティティが同じコンテキストにある必要があります。

public class CoursesContext: DbContext
{
   public DbSet<Assignment> Assignments {get; set;}    
   public DbSet<Course> Courses {get; set;}
}

割り当てナビゲーション プロパティを追加して、外部キーでフィルター処理できます。

public class Course
{
  [Key]
  public virtual int CourseID {get; set;}
  public virtual string CourseName {get; set;}
  public virtual Assignment {get; set;}
}

次に、次のようにクエリできます。

var staffId = 
      from c in a.Course
      where c.CourseID == 1001
      select c.Assignment.StaffID;
于 2012-07-06T13:39:39.923 に答える
1

DbSet ごとに個別のコンテキストを持たないでください。いえ

class MyDbContext : DBContext
{
   public DbSet<Course> Courses{get;set;}
   public DbSet<Assignment> Assignments{get;set;}
}
于 2012-07-06T13:44:27.143 に答える