0

正如前一个问题在这里提出的那样。

我正在使用DTO方法来内部连接数据。现在可以在我的加入结果中更新数据吗?数据将如何更新回应该可能的原始表?

要求:

  • 我正在使用实体框架、C#、ASP.NET Web API
  • 我正在使用 SQL Server

目前,我根据他们的ID成功加入了员工部门表。我根据他们的shift_id加入了员工工作班次。

内部连接查询在这里:

from e in DSE.employees
join d in DSE.departments on e.department_id equals d.department_id
join ws in DSE.workingshifts on e.shift_id equals ws.shift_id

所以数据在这里:

[{"FirstName":"gg","LastName":"wp","Gender":"NoGender","Salary":8,"Department_id":1, 
   "Department_Name":"RND","Shift_id":"B","Duration":"afternoon"}]

现在我想更新信息如下:

FirstName: good game
LastName: well played
Gender: IGender
Salary: 8888
Shift_id: A
Duration: Morning

我可以知道应该在我的 C# 和 Linq 中完成哪些代码吗?它会更新回我的数据库表吗?此外,我听说过这种使用 SQL 存储过程的解决方案,您也可以向我展示这种方法

4

1 回答 1

3

好吧,根据你的评论。用于基于联接更新值/值的 SQL Server 将是

UPDATE e
    SET e.FirstName = 'good game',
    e.LastName = 'well played'
FROM employees e
    INNER JOIN departments d ON d.department_id = e.department_id
    INNER JOIN workingshifts ws ON e.shift_id equals ws.shift_id
WHERE e.FirstName = 'gg'
    AND e.LastName = 'wp'

在不知道表格结构的情况下,我只是简单地使用了INNER JOIN.

可以找到执行此操作的实体框架:

var result = (from e in DSE.employees
              join d in DSE.departments on e.department_id equals d.department_id
              join ws in DSE.workingshifts on e.shift_id equals ws.shift_id
              where e.FirstName == "gg"
              && e.LastName == "wp"
              select e).FirstOrDefault()    // As it seems like we are just wanting employees however if you are expecting to return more than one employee back, you could use .ToList() instead of .FirstOrDefault()

if(result != null)
{
    result.FirstName = "Good Game";
    result.LastName = "Well Played";
    await context.SavechangesASync();   // If inside an async function, else just SaveChanges()
}

这只是如果您要退回一名员工。就像我说的,如果您要返回一个列表,则需要将更改合并到上面的代码中。有了上述内容,您还需要where在结果集上执行您想要返回所需值的位置

编辑:在实体框架方法中更改'"

于 2020-03-02T10:16:11.323 回答