gpt4 book ai didi

c# - 使用 Automapper 将 DTO 映射到实体

转载 作者:太空狗 更新时间:2023-10-29 18:04:04 27 4
gpt4 key购买 nike

我有一个具有以下结构的 Entity Framework POCO。

public class Entity
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}

我已经为此实体创建了一个数据传输对象以供我的 View 使用。

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

现在,我的 Global.asax 文件中有以下映射代码。

Mapper.CreateMap<Entity, EntityDto>();
Mapper.CreateMap<EntityDto, Entity>(); // not sure whether I need this as well?

一切正常,我将 DTO 传递给我的 View OK,我可以从我的 EntityDto 模型创建一个新的 Entity 实例。当我尝试编辑我的 Entity 时出现问题;我知道这是由于 AutoMapper 丢失了 EF 创建的用于跟踪对象更改的实体键,但是阅读了一些来源后似乎没有确定的解决方案。这是我用来编辑我的实体的操作。

public ActionResult EditEntity(EntityDto model)
{
var entity = context.Entities.Single(e => e.Id == model.Id);
entity = Mapper.Map<EntityDto, Entity>(model); // this loses the Entity Key stuff
context.SaveChanges();

return View(model);
}

现在,我该怎么做才能解决这个问题?我可以:

  1. 以某种方式告诉 AutoMapper .Ignore() 实体键属性?
  2. 让 AutoMapper 复制出实体 key 属性?
  3. .Attach() 我映射的 Entity 并将状态设置为已修改?

任何帮助总是感激。

最佳答案

尝试将实体作为第二个参数传递给您的映射。

entity = Mapper.Map<EntityDto, Entity>(model, entity);

否则,您的实体实例将被新实例覆盖,并且您会丢失在第一行中创建的实体。

关于c# - 使用 Automapper 将 DTO 映射到实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13156437/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com