Automapper vždy ukazuje děti subjekty

0

Otázka

Mám nadřazené třídy: Položky.
A související, dítě, třída: Pozice.

Nechci, aby zahrnoval Položky jako dítě z Pozice třídy.
Ale když jsem použití automapper, Položka je vždy zahrnuta jako dítě Polohy.

Třídy:

// Item
  public int Id { get; set; }
  public string Name { get; set; }
  public ICollection<Position> Positions { get; set;}


// Position
  public int Id { get; set; }
  public int ItemId { get; set; }
  public int CoordinateX { get; set; }
  public int CoordinateY { get; set; }
  public Item Item { get; set; }


// Item DTO
  public int Id { get; set; }
  public string Name { get; set; }
  public ICollection<Position> Positions { get; set; }

// Mapping profile
   CreateMap<Item, ItemDTO>();

Jsem se dostat Položky, jako:

Item item = dbContext.Items.AsNoTracking().Include(p => p.Positions);

To správně vrátí výsledek. To je to, co očekávám. Něco jako:

{
  Id: 1
  Name: "ABC",
  Positions:
    [
      {
        Id: 1,
        ItemId: 1,
        CoordinateX: 10,
        CoordinateY: 15,
        Item: []
      },
      {
        Id: 2,
        ItemId: 1,
        CoordinateX: 13,
        CoordinateY: 18,
        Item: []
      }
    ]
}

Všimněte si, že Položky objektu v děti záznamy je prázdný.
Nicméně, když jsem použití automapper, Položka je vždy zahrnuta jako dítě Polohy.

var result = mapper.Map<ItemDTO>(item);

To vytváří následující výsledek:

{
  Id: 1
  Name: "ABC",
  Positions:
    [
      {
        Id: 1,
        ItemId: 1,
        CoordinateX: 10,
        CoordinateY: 15,
        Item:
        [
          Id: 1,
          Name: "ABC",
          Positions: []
        ]
      },
      {
        Id: 2,
        ItemId: 1,
        CoordinateX: 13,
        CoordinateY: 18,
        Item:
        [
          Id: 1,
          Name: "ABC",
          Positions: []
        ]
      }
    ]
}

Jak mohu použít automapper a stále dosáhnout očekávaného výsledku?
Já používám .NET 5 a automapper 8.1.1
Jsem se snažil pomocí .Ignore v mapování profilu, ale výsledek byl stejný.

1

Nejlepší odpověď

1

Ty nejsi "mapování" Position seznam, který jste kopírování odkazu.

Jsem chtěl vytvořit PositionDTO stejně, a konfigurovat mapování z Position k PositionDTO ignorovat Item nemovitosti. Jinak jsi stále nesoucí odkazy na raw data v objektu DTO, což je porážet účel DTO.

2021-11-23 03:14:19

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................