C # AutoMapper обратное отображение в Entity Framework - PullRequest
0 голосов
/ 13 декабря 2018

2 простых класса и ItemDto:

public class Item
{
     [Key,DatabaseGenerated(DatabaseGeneratedOption.None)]
     public int Id {get;set;}
     public string name {get;set;}
     public Category cat {get;set;}
}

public class Category
{
     [Key,DatabaseGenerated(DatabaseGeneratedOption.None)]
     public int Id {get;set;}
     public string Name {get;set;}
}

public class ItemDto
{
     public int Id {get;set;}
     public string name {get;set;}
     public int CategoryId {get;set;}
     public string CategoryName {get;set;}
}

Профиль отображения:

CreateMap<ItemDto, Item>()
    .ForPath(dest => dest.Category.Id, opt => opt.MapFrom(src => src.CategoryId))
    .ForPath(dest => dest.Category.Name, opt => opt.MapFrom(src => src.CategoryName));

Вставка или обновление Entity Framework:

public void UploadOrInsert(ItemDto dto)
{
    var item =_db.Items.Include(x=>x.Category)
        .FirstOrDefault(x => x.Id == dto.Id) ?? new Item();
    bool isNew = false;

    if (item.Id == 0)
        isNew = true;

    _mapper.Map<ItemDto, Item>(dto, item);

    if (isNew)
        _db.Items.Add(item);
}

Вставка 2 различныхitemdtos с той же категорией в базе данных:

{ Id = 1, name = "Itemname1", CategoryId = 1, CategoryName = "CatName1" }
{ Id = 2, name = "Itemname2", CategoryId = 1, CategoryName = "CatName1" }

Первая может быть вставлена ​​корректно с 2 записями: item + 1 и category + 1, выдается следующее исключение при попытке вставить второй itemdto:

SqlException: нарушение ограничения PRIMARY KEY 'PK_Categories'.Невозможно вставить повторяющийся ключ в объект 'dbo.Categories'.Значение ключа-дубликата: (1).

Похоже, что второй dto пытается вставить ту же категорию, которая уже есть в базе данных. Есть ли способ предотвратить это в AutoMapper?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...