1

我正在尝试学习实体框架。说,我有以下课程

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);
}

这工作正常。现在,如果我添加第二堂课

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 从两个不同的数据库表中查询两个类之间的数据。

谢谢

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 没有单独的上下文。IE

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