Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET核心多对多关系问题,包括_C#_Entity Framework Core_Asp.net Core Mvc - Fatal编程技术网

C# ASP.NET核心多对多关系问题,包括

C# ASP.NET核心多对多关系问题,包括,c#,entity-framework-core,asp.net-core-mvc,C#,Entity Framework Core,Asp.net Core Mvc,我想在部门视图中显示员工的职位。目前,我只显示员工。如何包括员工职位?员工和职位之间的关系是多对多的,关系部门和员工之间的关系也是多对多的。 当职位和员工的关系是一对多时,没有问题。 我试图向DivisionEmployeeViewModel属性添加一个集合public IEnumerable EmployeePositionList{get;set;} 但我不知道如何进一步实施它。我被难住了 分区控制器中的方法动作 public async Task<IActionResult>

我想在部门视图中显示员工的职位。目前,我只显示员工。如何包括员工职位?员工和职位之间的关系是多对多的,关系部门和员工之间的关系也是多对多的。 当职位和员工的关系是一对多时,没有问题。 我试图向DivisionEmployeeViewModel属性添加一个集合
public IEnumerable EmployeePositionList{get;set;
} 但我不知道如何进一步实施它。我被难住了

分区控制器中的方法动作

public async Task<IActionResult> Details(int id)
        {
            var model = new DivisionEmployeeViewModel
            {
                DivisionEmployeeList = await _db.DivisionEmployeesModel.Include(x => x.Employee)
                .Include(x => x.Division).Where(x => x.Division_Id == id).ToListAsync(),

                DivisionEmployees = new DivisionEmployee()
                {
                    Division_Id = id
                },

                Division = await _db.Divisions.FirstOrDefaultAsync(x => x.Id == id)
            };

            List<int> tempAssignedList = model.DivisionEmployeeList.Select(x => x.Employee_Id).ToList();

            var tempList = await _db.Employees.Where(x => !tempAssignedList.Contains(x.Id)).ToListAsync();

            model.DivisionEmployeeListDropDown = tempList.Select(x => new SelectListItem
            {
                Text = x.FullName,
                Value = x.Id.ToString()
            });

            return View(model);
        }
公共异步任务详细信息(int-id)
{
var模型=新部门员工视图模型
{
部门员工列表=等待_db.DivisionEmployeesModel.Include(x=>x.Employee)
.Include(x=>x.Division)。其中(x=>x.Division_Id==Id)。ToListSync(),
部门员工=新部门员工()
{
分区Id=Id
},
Division=await\u db.Divisions.FirstOrDefaultAsync(x=>x.Id==Id)
};
List tempAssignedList=model.DivisionEmployeeList.Select(x=>x.Employee_Id).ToList();
var templast=await_db.Employees.Where(x=>!tempAssignedList.Contains(x.Id)).toListSync();
model.DivisionEmployeeListDropDown=模板列表.Select(x=>new SelectListItem
{
Text=x.FullName,
值=x.Id.ToString()
});
返回视图(模型);
}

我的回购协议

对不起,这里输入错误。。myEmployee.EmployeePositions.Select(ep=>ep.Position.Name),但我真的不明白你想在Where中放什么_db.EmployeePositions确实满足了“我需要得到员工的职位”的要求。对于单个员工来说,它是var posFor123=\u db.EmployeePositions.Include(ep=>ep.Position)。其中(ep=>ep.EmployeeId=123),然后你得到一个EmployeePosition的可枚举项,你可以把这些职位提取出来,可能像posFor123一样。选择(ep=>ep.Position.Name)–Caius Jard

你可以让EF为你编写代码。将相关表添加到DB(员工、部门、职位、EmployeeDepartment、EmployeePosition),添加关系(单字表名为1端,双字表名为M端),然后告诉EF再次构建DB(到新文件夹),并使用diff工具导入变更SP;在EFcore中,M:M关系是通过分解成两个1:Ms来完成的,然后只有Employee.EmployeePositions集合的EmployeePosition实体,它有一个Position属性,因此类似于
myEmployee。选择(e=>e.EmployeePositions.Position.Name)
来获取e持有的所有职位的名称,在通过例如
context.Employees.Include(e=>e.EmployeePositions)加载它们之后,然后包括(ep=>ep.positions)
Caius Jard我做了。但我需要得到员工的职位,而不是所有的职位。EmployeePositionList=await _db.EmployeePositions.Include(x=>x.Position)。Include(x=>x.Employee)。其中(x=>x.Position\u Id==0\u 0No ideas)。ToListSync(),//尝试了这么做来更正,在那里键入
myEmployee.EmployeePositions.Select(ep=>ep.Position.Name)
,但我真的不明白你想在Where中放什么<代码>\u db.EmployeePositions确实满足了“我需要得到员工的职位”的要求。对于一个员工来说,它是
var posFor123=\u db.EmployeePositions.Include(ep=>ep.Position)。其中(ep=>ep.EmployeeId=123)
,然后你会得到一个EmployeePosition的可枚举项,你可以将这些职位取出,可能像
posFor123.Select(ep=>ep.Position.Name)
Caius Jard是的,这是我的错=(Thx a lot Master!我没有看到我的错误。我将此代码更改为'EmployeePositionList=await _db.EmployeePositions.Include(x=>x.Position).Include(x=>x.Employee).ToListSync()',并修改了我的视图。我不知道为什么尝试使用Where=(