Skip to content

IUpdate设置更新实体和列的顺序 #2101

@fine-linx

Description

@fine-linx

问题描述及重现代码:

请教一下,在更新实体时,SetSource和UpdateColumns有顺序要求吗,现在的情况是,先SetSource再UpdateColumns,实际会更新所有字段,并且设置的CanUpdate=false不生效,先UpdateColumns再SetSource,就只会更新指定的字段

// 表
[Table(Name = "test_freesql2")]
public class TestFreeSqlTable2
{
    [Column(IsPrimary = true, IsIdentity = true)]
    public long Id { get; set; }

    public long Table1Id { get; set; }


    public int Item1 { get; set; }

    public int Item2 { get; set; }

    [Column(CanInsert = false, CanUpdate = false, DbType = "int GENERATED ALWAYS AS ((Item1 + Item2)) STORED")]
    public int Item3 { get; set; }
}

// 更新测试
 var data = await freeSql.Select<TestFreeSqlTable2>()
            .FirstAsync();

        data.Item1 = Random.Shared.Next();
        if (type == 1)
        {
            await freeSql.Update<TestFreeSqlTable2>()
                .SetSource(data)
                .UpdateColumns(x => new
                {
                    x.Item1
                })
                .ExecuteAffrowsAsync();
        }
        else
        {
            await freeSql.Update<TestFreeSqlTable2>()
                .UpdateColumns(x => new
                {
                    x.Item1
                })
                .SetSource(data)
                .ExecuteAffrowsAsync();
        }

SetSource在前,生成的sql

Image UpdateColumns在前,生成的sql Image

数据库版本

mysql8

安装的Nuget包

freesql3.5.212 freesql.provider.mysqlconnector3.5.212

.net framework/. net core? 及具体版本

.net8

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions