簡體   English   中英

如何准備與 dapper 的一對多關系

[英]how to prepare one-to-many relationship with dapper

我有一個數據集返回兩個帶有存儲過程的表; 第一個是與內連接一對一的關系。

我的第二個表是第一個表中標有 id 列的項目表。

Table1.ID 保存在 Def_SpecificationID 列中

存儲過程代碼:

SELECT Spec.ID as SpecID,
       Spec.Def_Specification_GroupID,
       Spec.SpecTitle,
       Spec.HasItem,
       Spec.IsActive,
       SpecGroup.SpecGroup
FROM Def_Specification Spec
INNER JOIN Def_Specification_Group SpecGroup ON Spec.Def_Specification_GroupID = SpecGroup.ID
WHERE Spec.IsActive = 1

SELECT ID, Def_SpecificationID, SpecificationTitle 
FROM Def_Specification_Items

表結構

我這里想要做的是根據第二個表中的Def Specification ID將數據添加到第一個表的元素中。

實體

   public class DefSpecificationAndGroupAndItems
   {
        public DefSpecificationAndGroupAndItems()
        {
            this.DefSpecificationItems = new();
        }

        public int ID { get; set; }
        public int Def_Specification_GroupID { get; set; }
        public string SpecTitle { get; set; }
        public int HasItem { get; set; }
        public bool IsActive { get; set; }
        public string SpecGroup { get; set; }
        public List<DefSpecificationItems> DefSpecificationItems { get; set; }
    }

簡潔的代碼

await connection.QueryAsync<DefSpecificationAndGroupAndItems,DefSpecificationItems, DefSpecificationAndGroupAndItems>(
                    "SP_DEF_SPECIFICATION_GET_ALL_BY_ACTIVE", 
                    (spec,items)=> {
                        DefSpecificationAndGroupAndItems result=new();
                        result.DefSpecificationItems.Add(items);
                        return result;
                    },
                    new { Active = active },
                    commandType: CommandType.StoredProcedure,
                    splitOn: "Def_SpecificationID,SpecID"
                    );

這段代碼對我有用,但是否有它的簡潔版本

var specification = new List<DefSpecificationAndGroupAndItems>();
                    using (var multi = await connection.QueryMultipleAsync("SP_DEF_SPECIFICATION_GET_ALL_BY_ACTIVE", new { Active = active },
                        commandType:CommandType.StoredProcedure))
                    {
                        var specs =(await multi.ReadAsync<DefSpecificationAndGroupAndItems>()).ToList();
                        var specItems = (await multi.ReadAsync<DefSpecificationItems>()).ToList();

                        foreach (var item in specs)
                        {
                            item.DefSpecificationItems = specItems.Where(i => i.Def_SpecificationID == item.ID).ToList();
                            
                        }
                        specification = specs;
                    }

如何映射從 dapper 中的數據集返回的表?

你可以只使用:

SELECT * 
FROM Def_Specification_Items 
WHERE Def_SpecificationId = @DefSpecificationId;

@DefSpecificationId將參數傳遞給Dapper

        specs.DefSpecificationItems = await connection
            .QueryAsync<List<DefSpecificationItems>>(sql, new 
            {
                DefSpecificationId = specs.Id
            });

specs在這里是DefSpecificationAndGroupAndItems

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM