繁体   English   中英

查询 Dapper 上的一对多映射

[英]One to many mapping on query dapper

我正在尝试在 dapper 上查询一对多,但由于某种原因,即使我应该从查询中获得多个值,我也只能从连接表中返回 1 个值有人可以告诉我我做错了什么吗?

我尝试做以下帖子答案中提到的使用 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;
        }
    }

我能够通过遵循https://dapper-tutorial.net/result-multi-mapping上的一对多 dapper 文档来解决这个问题

  public static MonsterDatabase GetMonster()
    {
        using (var connection = new SqlConnection(config["appsettings:RagnaDatabase"]))
        {
            var monsterDictionary = new Dictionary<int, MonsterDatabase>();
            var Monster = connection.Query<MonsterDatabase, MonsterLocationDatabase, MonsterDatabase>(
                "select top 10 Monster.*, SplitMonster = '', MonsterLocation.*" +
                " from Monster" +
                " left join MonsterLocation" +
                " on Monster.Id = MonsterLocation.FkMonsterId",
                (Monster, Location) =>
                {
                    MonsterDatabase monsterEntry;
                    if(!monsterDictionary.TryGetValue(Monster.Id, out monsterEntry))
                    {
                        monsterEntry = Monster;
                        monsterEntry.Location = new List<MonsterLocationDatabase>();
                        monsterDictionary.Add(monsterEntry.Id, monsterEntry);
                    }
                    monsterEntry.Location.Add(Location);
                    return monsterEntry;
                }, splitOn: "SplitMonster"
                ).Distinct().FirstOrDefault();
            return Monster;
        }
    }

显示结果的图像

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM