EF Code First多个表到单个实体

时间:2012-05-09 17:12:13

标签: entity-framework ef-code-first

我刚开始使用Entity Framework,我似乎误解了一些东西。基本上我已经设置了一个数据库。让我们说以下是我的表格。

**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等效?我发现的所有示例都使用导航属性从表到表(即类到类)。

1 个答案:

答案 0 :(得分: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),然后创建一个具有您提到的所有属性的类型。如果您需要姓氏,可以通过以下方式访问:

string lastName = query.LastName;