Обновить значение поля по другому в ef

как я могу изменить значение поля в соответствии с другим значением поля в мировностях структуры сущности?

У меня есть таблица с именем Tbl_Accounts со следующими столбцами:

  1. ID (int)
  2. Код (nvarchar (50))
  3. Имя (nvarchar (50))
  4. ParentID (int: nullable) -→ это идентификатор родителя, который имеет тип Account (древовидная архитектура)

В старой версии моей программы столбец "Код" имеет значение длины 3, например, я перечислю некоторые данные, хранящиеся в Tbl_Account ниже:

  • 1, '100', 'Parent1', нулевой
  • 2, '200', 'Parent2', нулевой
  • 3, '300', 'Parent3', нулевой
  • 4, '001', 'First Child OF Parent1', 1
  • 5, '002', 'Seccond Child OF Parent1', 1
  • 6, '001', 'Первый ребенок первого ребенка из родителя1', 4
  • 7, '001', 'First Child OF Seccond Child Of Parent1', 5

Теперь: я хочу изменить значение кодов, таких как ниже, в соответствии с его родительским с миграциями:

  • 1, '100', 'Parent1', null
  • 2, '200', 'Parent2', null
  • 3, '300', 'Parent3', null
  • 4, '100001', 'First Child OF Parent1', 1
  • 5, '100002', 'Seccond Child OF Parent1', 1
  • 6, "100001001", "Первый ребенок первого ребенка из родителя1", 4
  • 7, "100002001", "Первый ребенок ребенка Seccond Child Parent1", 5

Примечание: значение кода записи с идентификатором = 7:

  • 100002: значение столбца кода в записи с идентификатором = 5
  • 001: фактическое значение столбца кода в записи с идентификатором = 7

значение кода записи с идентификатором = 5:

  • 100: значение столбца кода в записи с идентификатором = 1
  • 002: фактическое значение столбца кода в записи с идентификатором = 5
1 ответ

Если вы хотите сделать это при миграции, вы можете использовать raw sql.

Sql (предположим, что вы работаете с Sql Server) будет выглядеть так (вам нужен рекурсивный CTE, поскольку обновленное значение может зависеть от "предыдущего" обновленного значения)

WITH cte 
AS
(
 SELECT id, code
 FROM Tbl_Accounts
 WHERE parent_id IS NULL
 UNION ALL
 SELECT u.id, d.code + u.code
 FROM Tbl_Accounts AS u
 INNER JOIN cte AS d
 ON d.id = u.parent_id
)
update t
set t.code = c.code
from cte c
join Tbl_Accounts t on t.id = c.id

Если вы используете первые миграции кода, вы можете поместить это как строковую переменную и просто выполнить (в методе th)

Sql(
<p> Вы также можете выполнить этот запрос непосредственно в своей базе (-ах), кстати.</p> <p> См. <a href="http://sqlfiddle.com/#!6/59dcc/1%23!6/59dcc/1" rel="nofollow noreferrer" target="_blank">SqlFiddle,</a> чтобы быть уверенным в результате</p>

licensed under cc by-sa 3.0 with attribution.