[英]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.