Обновить данные внутреннего соединения - PullRequest
0 голосов
/ 02 марта 2020

Как перенесено из предыдущего вопроса здесь .

Я использую метод DTO для внутреннего объединения данных. Теперь возможно обновить данные в моем объединенном результате? Как данные будут обновлены обратно в исходную таблицу, где это должно быть возможно?

Требование:

  • Я использую Entity Framework, C#, ASP. NET Web API
  • Я использую SQL Сервер

В настоящее время я успешно присоединился к сотруднику и отделу таблицы на основе их ID . Я присоединился к employee и worksingshifts , основываясь на их 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# а Линк? Будет ли он обновляться обратно к моим таблицам базы данных? Более того, я слышал об этом решении с помощью хранимой процедуры SQL, вы также можете показать мне этот подход

1 Ответ

3 голосов
/ 02 марта 2020

Ну, согласно вашему комментарию. SQL Сервер для обновления значения / значений на основе объединения будет

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.

. Entity Framework для этого можно найти:

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 для набора результатов, в котором вы хотите вернуть нужные значения

РЕДАКТИРОВАТЬ: Изменено ' на " в подходе Entity Framework

...