2

我刚开始使用实体框架,我似乎误解了一些东西。基本上我已经设置了一个数据库。假设以下是我的表格。

**Employees**
EmployeeId
CubeId (FK to Cubes table)
NameId (FK to Name table)

**Cubes**
CubeId
CubeName

**Person**
NameId
FirstName
LastName

我希望能够写出这样的东西:SELECT EmployeeId, CubeId, CubeName, FirstName, LastName FROM Employees LEFT OUTER JOIN Cubes LEFT OUTER JOIN Person. 所以它会返回所有的员工。基本上,在 EF Code First 中,您是否必须为每个表创建一个类?如果没有,你如何创建一个 LEFT OUTER Join 等价物?我发现的所有示例都使用导航属性从一个表转到另一个表(即从类到类)。

4

1 回答 1

3

楷模:

public class Employee 
{
    [Key]
    public int EmployeeId {get;set;}
    public int CubeId {get;set;}
    [ForeignKey("Cube")]
    public int NameId {get;set;}
    [ForeignKey("Name")]

    public virtual Cube Cube {get;set;}
    public virtual Name Name {get;set;}
}

public class Cube
{
    [Key]
    public int CubeId {get;set;}
    public string CubeName {get;set;}
}

public class Name
{
    [Key]
    public int NameId {get;set}

    public string FirstName {get;set;}
    public string LastName {get;set;}
}

您的上下文:

public class YourContext:DbContext
{
    public DbSet<Name> Names {get;set;}
    public DbSet<Cube> Cubes {get;set;}
    public DbSet<Employee> Employees {get;set;}
}

您的查询:

YourContext db = new YourContext();
var query = db.Employees.Where(x => x.EmployeeId == id).Select(x => new 
{ 
    EmployeeId = x.EmployeeId,
    CubeId = x.Cube.CubeId,
    CubeName = x.Cube.CubeName,
    FirstName = x.Name.FirstName,
    LastName = x.Name.LastName
}).FirstOrDefault();

这将找到第一个具有某些 id 的员工(如果没有,则返回 null),然后创建一个具有您提到的所有属性的类型。如果您需要姓氏,您可以通过以下方式访问它:

字符串姓氏 = 查询。姓氏;

于 2012-05-09T17:46:00.860 回答