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