C# 根据ef中的另一个字段值更新字段值

C# 根据ef中的另一个字段值更新字段值,c#,entity-framework,C#,Entity Framework,如何根据实体框架mirations中的另一个字段值更改字段值 我有一个名为Tbl_Accounts的表,表中有以下列: ID(int) 代码(nvarchar(50)) 姓名(nvarchar(50)) ParentID(int:nullable)--->这是Account类型的父级ID(树结构) 在我的旧版本程序中,“代码”列有一个3位长度的数值, 例如,我在下面列出了Tbl_账户中存储的一些数据: 1、'100','Parent1',null 2、'200','Parent2',空 3、'

如何根据实体框架mirations中的另一个字段值更改字段值

我有一个名为Tbl_Accounts的表,表中有以下列:

  • ID(int)
  • 代码(nvarchar(50))
  • 姓名(nvarchar(50))
  • ParentID(int:nullable)--->这是Account类型的父级ID(树结构)
  • 在我的旧版本程序中,“代码”列有一个3位长度的数值,
    例如,我在下面列出了Tbl_账户中存储的一些数据:

    • 1、'100','Parent1',null
    • 2、'200','Parent2',空
    • 3、'300','Parent3',空
    • 4、'001'、'父母的第一个孩子1',1
    • 5、'002'、'Second Child OF Parent1',1
    • 6、'001'、'父母第一个孩子的第一个孩子1',4
    • 7、'001'、'父母第二个孩子的第一个孩子1',5
    现在:我想根据迁移的父级更改下面代码的值:

    • 1,'100','Parent1',null
    • 2,'200','Parent2',空
    • 3,'300','Parent3',空
    • 4,“100001”,“父母的第一个孩子1”,1
    • 5、‘100002’、‘父母的第二个孩子1’、1
    • 6、'100001001'、'1号家长第一个孩子的第一个孩子',4
    • 7、‘100002001’、‘父母的第二个孩子的第一个孩子’,5
    注:ID=7的记录的代码值:

    • 100002:ID为5的记录中代码列的值
    • 001:ID=7的记录中代码列的实际值
    ID=5的记录的代码值:

    • 100:ID为1的记录中代码列的值
    • 002:ID=5的记录中代码列的实际值

    如果要在迁移中执行此操作,可以使用原始sql

    Sql(假设您使用的是Sql Server)如下所示(您需要一个递归CTE,因为更新的值可能依赖于“以前”的更新值)

    如果您使用代码优先迁移,您可以将其作为字符串变量,只需执行(在th up方法中)


    Sql(你想在迁移中做到这一点吗?这样你就可以完美地使用原始sql,对吗?迁移是基于你的实体而不是表中的条目来更改数据库的架构。所以请告诉我最好的方法是什么???,我希望任何用户第一次运行我的程序的新版本,程序自动更新值,而不是ks,但另一个数据库呢???所有数据库都支持Transact-SQL和公共表表达式???@hosseinab当然不是。您正在使用不同的数据库?还没有,但这是可能的。@hosseinab好的,所以您可以对其他数据库使用其他脚本。我必须承认,我从未尝试对不同的目标数据库使用代码优先迁移。。。
    
    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
    
    Sql(<yourStringVariableContainingTheSql);