繁体   English   中英

使用AutoMapper将实体中的数据展平/展平

[英]Flatten/Unflatten data from Entities to Models with AutoMapper

我想使用自动映射器展平/展平某些类,但是不确定是否可行。 我有一个ListDefo和ValueDefo,它们是如何定义列表和值的。 然后,用户可以将它们添加到数据对象中。 我不担心针对DataValue存储ValueDefo Id,因为我只需要字符串值。 这是课程

public class ListDefo {
    public long Id { get; set; }
    public virtual ICollection<ValueDefo> Values { get; set; }
}

public class ValueDefo {
    public long Id { get; set; }
    public string Value { get; set; }
}

public class Data {
    public long Id { get; set; }
    public ICollection<DataValue> Values { get; set; }
}

public class DataValue {
    public long Id { get; set; }
    public virtual ListDefo ListDefo { get; set; }
    public string Value { get; set; }
}

当前,如果我使用自动映射器,则将具有以下模型,这些模型将获得具有Values属性的Data对象,并且每个DataValue均具有Id,ListDefoId和Value。

public class DataModel {
    public long Id { get; set; }
    public ICollection<DataValueModel> Values { get; set; }
}

public class DataValueModel {
    public long Id { get; set; }
    public long ListId { get; set; }
    public string Value{ get; set; }
}

我想这很好,但是我认为这样会更干净一些,如果一个数据对象有一个列表列表,那么每个列表都只有值。 所以看起来像这样

public class DataModel {
    public long Id { get; set; }
    public ICollection<DataListModel> Lists { get; set; }
}

public class DataListModel {
    public long Id { get; set; }
    public string Name { get; set; }
    public ICollection<DataValueModel> Values { get; set; }
}

public class DataValueModel {
    public long Id { get; set; }
    public string Value{ get; set; }
}

使用automapper可以做到吗? 我也想再做一次

如果我更改实体以像模型一样存储数据,我可以轻松地做到这一点,但是拥有仅将数据记录和值记录链接起来的列表记录将毫无意义。

您可以使用自定义映射/解析器通过Automapper来扁平化/不扁平化类,但是类的层次结构越多,解析器就越复杂。

您可以保持模型(DTO)的层次结构相同,但是删除您认为不应设置客户端的所有属性,现在,当您想从DTO映射回原始实体时,可以忽略这些属性并映射只是模型(DTO)具有的属性。

暂无
暂无

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

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