根据ef中的另一个字段值更新一个字段值
本文关键字:字段 一个 更新 另一个 ef 根据 | 更新日期: 2023-09-27 18:12:41
如何根据实体框架镜像中的另一个字段值更改字段值?
我有一个名为Tbl_Accounts的表,包含以下列:
- ID (int)
- 代码(nvarchar (50))
- 名称(nvarchar (50))
- ParentID (int: nullable) ----->这是类型为Account(树结构)的父ID
在我的程序的旧版本中,'Code'列有一个3长度的数字值,
例如,我在下面列出了存储在Tbl_Account中的一些数据:
- 1,‘100’,‘Parent1’,空
- 2,‘200’,‘Parent2"……,空
- 3,‘300’,‘Parent3’,空
- 4,'001','第一个孩子',1
- 5,'002',' second Child OF parents ',1
- 6,'001','第一个孩子的第一个孩子的父母',4
- 7,'001','第一个孩子的第二个孩子的父母',5
现在:我想改变代码的值如下根据它的父迁移:
- 1, '100','Parent1',null
- 2, '200','Parent2',null
- 3, '300','Parent3',null
- 4, '100001','父母的第一个孩子',1
- 5,'100002','第二胎',1
- 6,'100001001','父母第一个孩子的第一个孩子',4
- 7,'100002001','第一个孩子的第二个孩子的父母',5
备注:Record with ID=7的代码值:
- 100002: ID=5记录中代码列的值
- 001: ID=7记录中代码列的实际值
ID=5的记录的码值:
- 100: ID=1的记录中代码列的值
- 002: ID=5 记录中代码列的实际值
如果您想在迁移中这样做,您可以使用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
如果您使用Code优先迁移,您可以将其作为字符串变量,并且只需执行(在up方法中)
Sql(<yourStringVariableContainingTheSql);
顺便说一下,您也可以直接在基库中执行此查询。
查看sqlFiddle以确定结果