首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dapper multipmap

Dapper multipmap
EN

Stack Overflow用户
提问于 2018-12-18 00:03:40
回答 1查看 53关注 0票数 0

我的数据库中有以下内容,其中包含一个交叉点/外部参照表

我想将它映射到以下对象

代码语言:javascript
复制
 public class Coin : CoinBase
{


    public IEnumerable<CoinAnnouncement> Announcements { get; set; }
    public IEnumerable<CoinCategory> Categories { get; set; }


}

如果可能的话,我想在一次中也包括公告(不在数据库图像中显示)

这是我衣冠楚楚的电话

代码语言:javascript
复制
 using (var conn = new SqlConnection(connectionString))
        {
            conn.Open();
            return await conn.QueryAsync<Coin, CoinCategory, Coin>(
                @"SELECT c.CoinId, c.Userid, c.IconPath, c.LastPriceBtc, c.LastUpdatedUtc, c.Name, c.Rank,
                         c.Symbol, c.LogoPath, c.Description, c.SubReddit, c.TwitterScreenName, c.Website, c.Discord,
                         c.FacebookPage, c.Telegram
                FROM Coins c
                INNER JOIN CoinCategoriesCategories coinCat ON coinCat.CoinId = c.CoinId
                INNER JOIN CoinCategories cat ON cat.CategoryId = coinCat.CategoryID", 
                (coin, coinCat) => {

                    coin.Categories = coinCat; //problem figuring out what this line would look like
                    return coin;
                });
        }

实际上,我只想忽略外部参照/连接表,并将类别直接映射到coin对象

EN

回答 1

Stack Overflow用户

发布于 2018-12-18 00:37:54

基于https://www.tritac.com/blog/dappernet-by-example的解决方案

代码语言:javascript
复制
      var lookup = new Dictionary<int, Coin>();

        using (var conn = new SqlConnection(connectionString))
        {
            conn.Open();
            var result = await conn.QueryAsync<Coin, CoinCategoryCategory, CoinCategory, Coin>(
                @"SELECT c.*, coinCat.*, cat.*
                    FROM Coins c
                    INNER JOIN CoinCategoriesCategories coinCat ON coinCat.CoinId = c.CoinId
                    INNER JOIN CoinCategories cat ON cat.CategoryId = coinCat.CategoryID", 
                (c, cat, coinCat) =>
                {

                    Coin coin;
                    if (!lookup.TryGetValue(c.CoinId, out coin))
                    {
                        lookup.Add(c.CoinId, coin = c);
                    }
                    if (coin.Categories == null)
                        coin.Categories = new List<CoinCategory>();
                    coin.Categories.Add(new CoinCategory { CategoryId = coinCat.CategoryId, Description = coinCat.Description });
                    return coin;
                }, splitOn: "CategoryId, CoinId");

            return lookup.Values;
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53818851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档