Navigate导航属性异常 返回

SqlSugar 待处理
297
SqlSuger版本:
程序集 SqlSugar, Version=5.1.4.196, Culture=neutral, PublicKeyToken=null
使用MySql 8.0,连接字符创配置了:AllowLoadLocalInfile=true
    /// <summary>工站 MIL 结果矩阵(主表)</summary>
    [SugarTable("MILResultMatrix")]    public class MILResultMatrix
    {
        [SugarColumn(ColumnName = "Id", IsPrimaryKey = true)]        public long Id { get; set; }
        [SugarColumn(ColumnName = "Station", Length = 256)]        public string Station { get; set; }
        [SugarColumn(ColumnName = "Target", DecimalDigits = 6)]        public decimal Target { get; set; }
        [SugarColumn(ColumnName = "Sequence")]        public int Sequence { get; set; }
        [SugarColumn(ColumnName = "CreateTime", ColumnDataType = "datetime(3)", IsOnlyIgnoreUpdate = true)]        public DateTime CreateTime { get; set; }

        [SugarColumn(ColumnName = "CreateUserId", IsNullable = true)]        public int? CreateUserId { get; set; }

        [SugarColumn(ColumnName = "UpdateTime", ColumnDataType = "datetime(3)", IsOnlyIgnoreInsert = true)]        public DateTime? UpdateTime { get; set; }

        [SugarColumn(ColumnName = "UpdateUserId", IsNullable = true)]        public int? UpdateUserId { get; set; }        /// <summary>一对多:同一工站下多行 StageMatrix</summary>
        [Navigate(NavigateType.OneToMany, nameof(StageMatrixRow.MILResultMatrixId))]        public List<StageMatrixRow> StagesMatrix { get; set; }
    }
    /// <summary>阶段×CFG 矩阵行</summary>
    [SugarTable("StageMatrixRow")]    public class StageMatrixRow
    {
        [SugarColumn(ColumnName = "Id", IsPrimaryKey = true)]        public long Id { get; set; }
        [SugarColumn(ColumnName = "MILResultMatrixId")]        public long MILResultMatrixId { get; set; }        /// <summary>若不需要反查主表,可整段删掉或保留并加 IsIgnore</summary>
        [Navigate(NavigateType.ManyToOne, nameof(MILResultMatrixId))]        public MILResultMatrix MILResultMatrix { get; set; }
        [SugarColumn(ColumnName = "Stage", Length = 128)]        public string Stage { get; set; }        /// <summary>无 CFG 模式:数据库 NULL</summary>
        [SugarColumn(ColumnName = "Cfg", Length = 128, IsNullable = true)]        public string Cfg { get; set; }

        [SugarColumn(ColumnName = "CreateTime", ColumnDataType = "datetime(3)", IsOnlyIgnoreUpdate = true)]        public DateTime CreateTime { get; set; }

        [SugarColumn(ColumnName = "CreateUserId", IsNullable = true)]        public int? CreateUserId { get; set; }

        [SugarColumn(ColumnName = "UpdateTime", ColumnDataType = "datetime(3)", IsOnlyIgnoreInsert = true)]        public DateTime? UpdateTime { get; set; }

        [SugarColumn(ColumnName = "UpdateUserId", IsNullable = true)]        public int? UpdateUserId { get; set; }        /// <summary>一对一:缺陷指标在子表 StageData</summary>
        [Navigate(NavigateType.OneToOne, nameof(StageData.StageMatrixRowId))]        public StageData DefectData { get; set; }
    }
    /// <summary>缺陷维度数据(原 StageDataDto)</summary>
    [SugarTable("StageData")]    public class StageData
    {
        [SugarColumn(ColumnName = "Id", IsPrimaryKey = true)]        public long Id { get; set; }
        [SugarColumn(ColumnName = "StageMatrixRowId")]        public long StageMatrixRowId { get; set; }
        [Navigate(NavigateType.OneToOne, nameof(StageMatrixRowId))]        public StageMatrixRow StageMatrixRow { get; set; }
        [SugarColumn(ColumnName = "Input")]        public int Input { get; set; }
        [SugarColumn(ColumnName = "Yield", DecimalDigits = 6)]        public decimal Yield { get; set; }
        [SugarColumn(ColumnName = "Defect", Length = 512)]        public string Defect { get; set; }
        [SugarColumn(ColumnName = "FR", DecimalDigits = 6)]        public decimal FR { get; set; }
        [SugarColumn(ColumnName = "DefectQty")]        public int DefectQty { get; set; }

        [SugarColumn(ColumnName = "CreateTime", ColumnDataType = "datetime(3)", IsOnlyIgnoreUpdate = true)]        public DateTime CreateTime { get; set; }

        [SugarColumn(ColumnName = "CreateUserId", IsNullable = true)]        public int? CreateUserId { get; set; }

        [SugarColumn(ColumnName = "UpdateTime", ColumnDataType = "datetime(3)", IsOnlyIgnoreInsert = true)]        public DateTime? UpdateTime { get; set; }

        [SugarColumn(ColumnName = "UpdateUserId", IsNullable = true)]        public int? UpdateUserId { get; set; }
        [Navigate(NavigateType.OneToMany, nameof(MILTrend.StageDataId))]        public List<MILTrend> Trend { get; set; }
    }    /// <summary>趋势点</summary>
    [SugarTable("MILTrend")]    public class MILTrend
    {
        [SugarColumn(ColumnName = "Id", IsPrimaryKey = true)]        public long Id { get; set; }        /// <summary>外键:归属哪条 StageData(原模型未显式声明,库表必需)</summary>
        [SugarColumn(ColumnName = "StageDataId")]        public long StageDataId { get; set; }
        [Navigate(NavigateType.ManyToOne, nameof(StageDataId))]        public StageData StageData { get; set; }
        [SugarColumn(ColumnName = "Rate", DecimalDigits = 6)]        public decimal Rate { get; set; }
        [SugarColumn(ColumnName = "Qty")]        public int Qty { get; set; }
        [SugarColumn(ColumnName = "Date", Length = 32)]        public string Date { get; set; }
        [SugarColumn(ColumnName = "CreateTime", ColumnDataType = "datetime(3)", IsOnlyIgnoreUpdate = true)]        public DateTime CreateTime { get; set; }

        [SugarColumn(ColumnName = "CreateUserId", IsNullable = true)]        public int? CreateUserId { get; set; }

        [SugarColumn(ColumnName = "UpdateTime", ColumnDataType = "datetime(3)", IsOnlyIgnoreInsert = true)]        public DateTime? UpdateTime { get; set; }

        [SugarColumn(ColumnName = "UpdateUserId", IsNullable = true)]        public int? UpdateUserId { get; set; }
    }

使用如下代码时报错:The column name 'SugarNav_Id' does not exist in the result set.”

var existingStageRows = await _sqlSugar.Db.Queryable<StageMatrixRow>()
    .Includes(s => s.MILResultMatrix)   // 暂时注释掉
    .WhereIF(hasStageSelection, s => milParaDto.Stages.Contains(s.Stage))
    .WhereIF(hasCfgSelection, s => milParaDto.Cfgs.Contains(s.Cfg))
    .Select(s => new  
    {
        Stage = s.Stage,
        Cfg = s.Cfg,
        StationKey=s.MILResultMatrix.Station+"_"+ s.MILResultMatrix.Sequence
    })
    .ToListAsync();
    改为以下写法正常:
                    var existingStageRows = await _sqlSugar.Db.Queryable<StageMatrixRow>()
                    .LeftJoin<MILResultMatrix>((s, m) => s.MILResultMatrixId == m.Id)
                    .WhereIF(hasStageSelection, (s, m) => milParaDto.Stages.Contains(s.Stage))
                    .WhereIF(hasCfgSelection, (s, m) => milParaDto.Cfgs.Contains(s.Cfg))
                    .Select((s, m) => new
                    {
                        Stage = s.Stage,
                        Cfg = s.Cfg,
                        StationKey = m.Station + "_" + m.Sequence
                    })
                    .ToListAsync();


热忱回答0