【发布时间】:2022-01-17 18:30:17
【问题描述】:
我正在尝试在 dapper 上进行一对多的查询,但由于某种原因,即使我应该从查询中获得多个值,我也只能从连接的表中返回 1 个值 谁能告诉我我做错了什么?
我尝试做以下帖子回答Mapping one to many with Dapper中提到的事情
我的代码:
public class MonsterDatabase
{
public int Id { get; set; }
public int MonsterId { get; set; }
public string Name { get; set; }
public List<MonsterLocationDatabase> Location { get; set; }
}
public class MonsterLocationDatabase
{
public int Id { get; set; }
public int FkMonsterId { get; set; }
public string Map { get; set; }
public int Frequency { get; set; }
public string MapImage { get; set; }
public DateTime? DeathTime { get; set; }
public DateTime? RespawnTime { get; set; }
}
public static MonsterDatabase GetMonster(Monster monster)
{
using (var connection = new SqlConnection(config["appsettings:RagnaDatabase"]))
{
var Monster = connection.Query<MonsterDatabase, MonsterLocationDatabase, MonsterDatabase>(
"select top 1 Monster.*, SplitMonster = '', MonsterLocation.*" +
" from Monster" +
" join MonsterLocation" +
" on Monster.Id = MonsterLocation.FkMonsterId",
(Monster, Location) =>
{
Monster.Location = new List<MonsterLocationDatabase>();
Monster.Location.Add(Location);
return Monster;
}, splitOn: "SplitMonster"
).FirstOrDefault();
return Monster;
}
}
【问题讨论】:
-
.FirstOrDefault返回一个结果 -
@BarışCanYılmaz 是的,但我只想要 1 个结果,其中 List
内部填充了多个对象。如果我这样做了 -
splitOn: "SplitMonster"没有意义,因为该列不会更改。它必须是从一个子对象更改为下一个子对象的列。你也有select top 1无论如何只会返回一行 -
您的某些代码在这里没有意义:您声明了
var Monster = ...,但这似乎是传递给GetMonster方法的monster变量的类型。跨度>