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