2 回答

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超11個(gè)贊
好吧,想通了。兩件事情:
首先, splitOn 是實(shí)現(xiàn)此目的的方法。一個(gè)不同但相關(guān)的最終版本如下所示:
return connection.Query<Program,
AssistanceProgramCategory,
AssistanceProgramType,
AssistanceProgramLegalType,
ProgramAuthority,
Program>(sql: Constants.SqlStatements.SELECT_PROGRAMS_SQL,
(program, category, programType, legalType, authority) =>
{
program.AssistanceCategory = category;
program.ProgramType = programType;
program.ProgramLegalType = legalType;
program.Authority = authority;
return program;
}, splitOn: "Name,Jurisdiction");
其中 AssistanceProgramCategory、AssistanceProgramType 和 AssistanceProgramLegalType 都是 Enumeration 的子項(xiàng)。
其次,SQL 必須提供帶有名稱(chēng)的列,如下所示:
SELECT global_id as GlobalId
,tier
,program_description as Name
,program_type as Name
,program_legal_type as Name
,jurisdiction as Jurisdiction
,customer_id as CustomerId
,program_name as ProgramNameForJurisdiction
,program_description as ProgramName
FROM public.assistance_programs
第三,我只需要將“Name”放入 splitOn 一次 - Name 的每個(gè)實(shí)例都會(huì)導(dǎo)致創(chuàng)建一個(gè)新對(duì)象。
最后,我必須交換 Jurisdiction 和 CustomerId,因?yàn)?CustomerId 可以為 null,并且當(dāng)為 NULL 時(shí),它不會(huì)將最終的水合激發(fā)到 ProgramAuthority 中。管轄權(quán)始終存在,因此通過(guò)交換 SQL 中的列來(lái)解決問(wèn)題。

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超10個(gè)贊
也許這太簡(jiǎn)單了,但是,您選擇的列名需要與您要映射到的類(lèi)中的屬性相匹配,否則 Dapper 將不知道如何使映射匹配。
所以如果你的班級(jí)是:
public class Person
{
public Race Race {get;}
public Guid PersonId {get;}
}
那么您的查詢(xún)需要匹配:
return connection.Query<Person>(sql: @"
SELECT
Race
, person_id as PersonId
FROM public.people");
請(qǐng)注意 Race 上的大寫(xiě) R。(為了更好地衡量,我也喜歡讓它們保持相同的順序,盡管我不確定這是否重要。)
除此之外,如果您直接對(duì)數(shù)據(jù)庫(kù)執(zhí)行查詢(xún),您會(huì)得到您期望的結(jié)果嗎?
- 2 回答
- 0 關(guān)注
- 162 瀏覽
添加回答
舉報(bào)