我有一個類AnalysisRule多對多的關係如何映射到與短小精悍
public class AnalysisRule
{
public long Id { get; set; }
public Analysis Analysis { get; set; }
public AnalysisCategory AnalysisCategory { get; set; }
public Gender Gender { get; set; }
public bool FatherHerdBookRequired { get; set; }
public bool MotherHerdBookRequired { get; set; }
public List<Breed> AllowedBreeds { get; set; }
}
這具有品種名單
public class Breed
{
public long BreedId { get; set; }
public long AnimalTypeId { get; set; }
public long BreedCode { get; set; }
public string BreedName { get; set; }
public string BreedAcronym { get; set; }
}
這是一個許多人,我結合許多關係的列表與數據庫表一起 AnalysisRulesBreeds
品種
憑藉小巧玲瓏的我都試過
var sql = @"select *
from ""AnalysisRules""
join ""AnalysisCategory"" on ""AnalysisRules"".""AnalysisCategoryId"" = ""AnalysisCategory"".""Id""
join ""Analysis"" on ""AnalysisRules"".""AnalysisId"" = ""Analysis"".""Id""
left join ""AnalysisRulesBreeds"" on ""AnalysisRulesBreeds"".""AnalysisRuleId"" = ""AnalysisRules"".""Id""
left join ""Breed"" on ""AnalysisRulesBreeds"".""BreedId"" = ""Breed"".""BreedId""
where ""AnalysisId"" = :AnalysisId";
rules = sqlConnection.QueryAsync<AnalysisRule, AnalysisCategory, Analysis, Breed, AnalysisRule>(
sql,
(ar, c, a, b) =>
{
ar.AnalysisCategory = c;
ar.Analysis = a;
ar.Breeds.Add(b);
return ar;
},
new
{
AnalysisId = analysisId
},
splitOn:"BreedId");
這給了我
'When使用多地圖API確保您設置的splitOn PARAM如果您有鑰匙以外的其他鑰匙 參數名稱:splitOn
如果我在SQL Developer中運行相同的查詢,我會得到2個具有相同Id但具有Breed中不同數據的行,所以查詢應該足夠好。
那麼如何將這2行放入一個AnalysisRule實體,其中Breeds包含2個Breed實體?
編輯 我現在有
sqlConnection.Open();
var sql = @"select ar.*,
ac.*,
b.*
from ""AnalysisRules"" ar
join ""AnalysisCategory"" ac on ar.""AnalysisCategoryId"" = ac.""Id""
join ""Analysis"" a on ar.""AnalysisId"" = a.""Id""
left join ""AnalysisRulesBreeds"" on ""AnalysisRulesBreeds"".""AnalysisRuleId"" = ar.""Id""
left join ""Breed"" b on ""AnalysisRulesBreeds"".""BreedId"" = b.""Id""
where ""AnalysisId"" = :AnalysisId";
var rules = sqlConnection.QueryAsync<AnalysisRule, AnalysisCategory, Analysis, Breed, AnalysisRule>(
sql,
(ar, c, a, b) =>
{
ar.AnalysisCategory = c;
ar.Analysis = a;
ar.Breeds.Add(b);
return ar;
},
new
{
AnalysisId = analysisId
});
return await rules;
刪除了splitOn,改變AnalysisRulesBreedsId來標識,但我仍然得到
當使用多地圖API確保您設置的splitOn PARAM如果您的鑰匙不是Id 參數名稱:splitOn
已嘗試使用您的建議進行編輯,但即使我僅在所有表格中使用Id作爲PK,仍然會得到相同的錯誤,請參閱編輯部分以獲取SQLDev中獲得的數據的屏幕截圖 – Mech0z
如果結果Dapper接收包含屏幕轉儲(Id,Id_1,Id_2)中顯示的id列名稱,則不起作用。 Oracle的東西?在SQL Server中的相同查詢將命名ID列Id,Id和Id ... –
是否可以爲每個列顯示像ac。「Id」的每個列作爲「AnalysisCategoryId」並以某種方式執行spliton? – Mech0z