实体框架中的C#AutoMapper反向映射

时间:2018-12-13 14:56:44

标签: c# entity-framework automapper

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

实体框架插入或更新:

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个具有相同类别的不同itemtos插入数据库:

{ 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中防止这种情况发生?

0 个答案:

没有答案