我的应用程序中有以下模型:
angular.module('app', []).
controller('MainController', ['$scope', function ($scope) {
$scope.testExpand = function(){
alert("testExpand is called to show");
document.querySelector("maindiv").classList.add("maindivColor");
}
}]);
我想使用Entity Framework创建一个查询,从public class Employee
{
public int PersonId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int Benefits { get; set; }
}
public class Department
{
public int DeptID { get; set; }
public string DeptName { get; set; }
}
public class DeptEmp
{
public int PersonID { get; set; }
public int DeptID { get; set; }
}
中选择所有列,条件是它只检索那些employee
与PersonId
有关系的员工来自DeptId
的{{1}}班级和DeptEmp
与DepartId
中的Department
有关系。
我写了以下LINQ语句:
DeptId
但它不起作用。我错过了什么吗?
答案 0 :(得分:0)
实体框架适用于"使用标准或其他"基础。如果您使用标准,这是相当容易的,如果不是,您必须提供有关您的偏差的大量信息。
例如,实体框架期望Employee的主键为Id或EmployeeId。如果您决定使用其他主键(PersonId),则必须告诉实体框架这是您的主键。
你的多对多关系也是如此。如果使用默认值,则相当容易,否则您需要使用属性或流畅的API来通知默认值的偏差。
您的员工/部门模型中的默认多对多将是:
另见Entity Framework Tutorial Configure many-to-many
public class Employee
{
public int EmployeeId{ get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int Benefits { get; set; }
// an employee has many departments:
public virtual ICollection<Department> Departments { get; set; }
}
public class Department
{
public int DeptartmentId { get; set; }
public string DeptName { get; set; }
// an department has many employees
public virtual ICollection<Employee> Employees{ get; set; }
}
public MyDbContext : DbContext
{
public DbSet<Employee> Employees {get; set;}
public DbSet<Department> Departments {get; set;}
}
如果您使用这些类创建一个简单的控制台应用程序,您将看到它还创建了一个多对多表。您很少需要此表,但如果您真的需要它,可以将其添加到DbContext。
我希望...从员工中选择所有列,条件是它只检索PersonId与DeptId有关系的员工
我认为这意味着给定一个DeptId你想要所有员工在这个DeptId工作的所有财产:
using (var dbContext = new MyDbContext(...))
{
var myDepartment = dbContext.Departments
.Where(department => department.DepartmentId == DeptId)
.SingleOrDefault();
// I know there is at utmost one, because it is a primary key
if (myDepartment == null) ShowDepartmentMissing(...);
var employeesOfDepartment = myDepartment.Employees
.Select(employee => new
{
FirstName = employee.FirstName,
LastName = employee.LastName,
Benefits = employee.Benefits,
});