AutoMapper - 忽略源不提供的目标成员

时间:2018-03-06 19:32:38

标签: c# .net entity-framework mapping automapper

我有成员不完全匹配的实体和Dtos。实体大多数时间都是所有成员(对于db中的每一列),但Dtos只有那些正在向客户端发送(需要)的成员。

因此,例如,当Dto来自客户端时,我想将其传输到Entity并保存数据库中的更改。这段代码解释了我现在正在努力的地方:

public class ItemEntity
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Category { get; set; }
    public int Foo { get; set; }
    public int Bar { get; set; }
}

public class ItemNameDto
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public void UpdateItem(ItemNameDto itemNameDto)
{
    using (var myc = ContextFactory.CreateMyContext())
    {
        var item = myc.Items.Where(i => i.Id == itemNameDto.Id).FirstOrDefault();

        // At this point I have the current Item from the database:
        // (while dubugging) item.Id=1
        // (while dubugging) item.Name="Item1"
        // (while dubugging) item.Category=1
        // (while dubugging) item.Foo=20
        // (while dubugging) item.Bar=40

        // Now I want to change only members, that appear in itemNameDto:
        // (while dubugging) itemDto.Id=1
        // (while dubugging) itemDto.Name="New name for Item1"

        item = Mapper.Map<Item>(itemDto);

        // (while dubugging) item.Id=1
        // (while dubugging) item.Name="New name for Item1"
        // (while dubugging) item.Category=1
        // (while dubugging) item.Foo=20
        // (while dubugging) item.Bar=40

        myc.SaveChanges();
    }
}

我想维护所有未出现在ItemNameDto中的成员。所以我想:

    item = Mapper.Map<Item>(itemDto);

    // (while dubugging) item.Id=1
    // (while dubugging) item.Name="New name for Item1"
    // (while dubugging) item.Category=1
    // (while dubugging) item.Foo=20
    // (while dubugging) item.Bar="This is bar"

有一种简单的方法可以自动执行此操作吗?或者我是否必须为所有场景/所有成员创建不同的映射?

谢谢,

0 个答案:

没有答案