AutoMapper可以映射到附加实体吗?

时间:2015-01-30 10:48:18

标签: c# entity-framework automapper

对于我的更新操作,我的控制器操作执行如下操作:

    public Task<IHttpActionResult> Update(int id, CustomerTypeDto customerTypeDto)
    {
        var entity = customerTypeService.Get(id);

        entity.Number = customerTypeDto.Number;
        entity.Description = customerTypeDto.Description;

        entity = customerTypeService.Save(entity);

        return Ok<CustomerTypeDto>(Mapper.Map<CustomerTypeDto>(entity));
    }

这是一个简单的例子,它包含一个由2个属性组成的简单实体。我的大多数实体都是具有大量属性和深层关系的复杂实体。

我需要先从数据库加载实体,以便它开始被上下文跟踪。我设置了属性,然后将更新的实体保存回数据库。存储库的更新方法如下所示:

    public virtual void Update(T entity)
    {
        DbEntityEntry dbEntityEntry = dataContext.GetEntry(entity);
        if (dbEntityEntry.State == EntityState.Detached)
        {
            dbSet.Attach(entity);
            dbEntityEntry.State = EntityState.Modified;
        }
    }

执行上述操作,EF正确创建并更新仅包含更改属性的SQL语句。

使用Automapper,是否可以在从db加载后将dto类映射到模型,以便在映射发生时跟踪更改?

而不是:

entity.Number = customerTypeDto.Number;
entity.Description = customerTypeDto.Description;

是否可以这样做:

entity = Mapper.Map(customerTypeDto, entity);

如果无法做到这一点,除了设置个别属性外还有哪些其他选择?也许使用GraphDiff或此Delta implemenation

0 个答案:

没有答案