簡體   English   中英

AutoMapper:類屬性,映射ISet <object> 到HashSet <Object>

[英]AutoMapper: class properties, map ISet<object> to HashSet<Object>

我已經定義了一個映射到/來自我的DTO對象的映射,除了DTO對象具有定義為ISet的集合和非DTO對象將那些集合定義為HashSet之外,其他屬性與另一個匹配。 我注意到DTO - > Non DTO的映射效果顯着,與其他方式相比。

AutoMapper似乎很難從具體類的Interface轉到,我想知道我是否遺漏了映射中的某些內容,或者某處某些地方的配置更加明確。 這個范例存在於我們的代碼庫中,但是對於我的問題,我可以在大約8秒內 DTO映射2k個對象,並且我可以在大約.1秒內將完全相同的對象映射 DTO

class ExampleDTO
{
    public int Id;
    public enum Type;
    public DateTime creationTime;
    public ISet<string> StringThings;
    public ISet<int> IntThings;
    public ISet<double> DoubleThings;
}
class Example
{
    public int Id;
    public enum Type;
    public DateTime creationTime;
    public HashSet<string> StringThings;
    public HashSet<int> IntThings;
    public HashSet<double> DoubleThings;
}

制圖:

CreateMap<ExampleDTO, Example>();
CreateMap<Example, ExampleDTO>();

我們發現升級Automapper(到版本6.0.2)將成為我們的方法。 使用更新的AutoMapper以及上面列出的相同對象和映射,我們看到ExampleDTO-> Example對象在1.57秒內映射,反向情況在1.86秒內映射。 我發布一個說使用升級的答案並不是很高興,所以我會發布一些可以獲得適度收益的選項,如果有其他人有實際答案,我會很樂意標記那個。

我嘗試為ISet HashSet創建一個映射,這個速度大約是沒有指定映射的兩倍,我不記得我在這里做什么,但我在谷歌上發現了它。

我嘗試的另一個選項是在DTO對象上創建Non Mappable HashSets,它只返回ISet。 這大約快了3倍,但仍然沒有接近升級所獲得的性能。

class ExampleDTO
{
    public int Id;
    public enum Type;
    public DateTime creationTime;
    public ISet<string> StringThings;
    [IgnoreMap]
    public HashSet<string> StringThingsHash
    {
        get
        {
            return StringThings;
        }
    }
    public ISet<int> IntThings;
    [IgnoreMap]
    public HashSet<int> IntThingsHash
    {
        get
        {
            return IntThings;
        }
    }
    public ISet<double> DoubleThings;
    [IgnoreMap]
    public HashSet<double> DoubleThingsHash
    {
        get
        {
            return DoubleThings;
        }
    }

我使用了以下映射

CreateMap<ExampleDTO, Example>()
  .ForMember(dest => dest.StringThings, opts => opts.MapFrom(src => src.StringThingsHash)
  .ForMember(dest => dest.IntThings, opts => opts.MapFrom(src => src.IntThingsHash)
  .ForMember(dest => dest.DoubleThings, opts => opts.MapFrom(src => src.DoubleThingsHash);
CreateMap<Example, ExampleDTO>();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM