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

时间:2014-12-06 08:34:25

标签: c# asp.net .net automapper

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

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; }
}

目前,如果我使用的是automapper,我将拥有以下模型,我将获得一个带有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吗?我想再做一遍

如果我改变我的实体来存储像模型这样的数据,我可以很容易地做到这一点,但是将列表记录链接到数据记录和值记录上是没有意义的

1 个答案:

答案 0 :(得分:0)

您可以使用custom mapping/resolvers使用Automapper压缩/取消标记类,但是您的类的层次结构越多,解析器就越复杂。

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