iT邦幫忙

0

C# .Net Core Mapper DTO 自動代入子類別的資料

Ks 2019-01-15 11:40:37710 瀏覽

請問我該如何做mapper才能把Assets的資料利用關聯性includes進來呢?


MapperConfiguration = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<UserBalancesDto, UserBalances>();
}

public class UserBalancesDto
{
    public Int64 id { get; set; }
    
    public Int64 asset_id { get; set; }
    
    public virtual Assets assets { get; set; }
    
    public string user_id { get; set; }

    public decimal total { get; set; }
}

public class Asset
{
    public Int64 id { get; set; }
    public string name { get; set; }
    public decimal amount { get; set; }
}

public class UserBalances
{
    public Int64 id { get; set; }
    
    public Int64 asset_id { get; set; }
    [ForeignKey("asset_id")]
    public virtual Assets assets { get; set; }
    
    public string user_id { get; set; }

    public decimal total { get; set; }
}
石頭 iT邦研究生 3 級 ‧ 2019-01-15 12:08:34 檢舉
你可以參考 https://stackoverflow.com/questions/21413273/automapper-convert-from-multiple-sources
Ks iT邦新手 4 級 ‧ 2019-01-16 17:55:58 檢舉
好的~謝謝 我研究看看

1 個回答

1
LarryLin
iT邦新手 5 級 ‧ 2019-01-16 13:29:36
最佳解答

直接再把想要轉到Dto類別寫下去就好

MapperConfiguration = new MapperConfiguration(cfg =>
{
cfg.CreateMap<UserBalancesDto, UserBalances>();
cfg.CreateMap<AssetDto, Asset>();
}

Ks iT邦新手 4 級 ‧ 2019-01-16 17:58:47 檢舉

謝謝回覆.有試著這麼做了,結果不可以/images/emoticon/emoticon02.gif
原本想讓它有.include(x=>x.Assets)這樣的結果
目前的作法是自己寫代碼把資料重新讀出來.

LarryLin iT邦新手 5 級 ‧ 2019-01-17 09:40:10 檢舉

先問一下 你想要的是哪一種做法
1.先把所有資料都到UserBalances並且Include Asset裡面才做AutoMapper轉型

Ans:用我上面的方法就可以了

2.在你用AutoMapper幫UserBalances做轉型的時候順便幫你從資料庫撈取資料

Ans:cfg.CreateMap<UserBalancesDto, UserBalances>()
.ForMember(dest => dest.assets,
opt => opt.MapFrom(src => dbContext. Assets.FirstOrDefault(a=>a.id==src.asset_id)));

我要發表回答

立即登入回答