在MVC控制器中映射模型数据

时间:2019-05-24 13:11:21

标签: asp.net .net asp.net-mvc

背景:在我的dotnet MVC项目中,我有两个数据模型类

public class IenState
{
   public int Id { get; set; }
   public ulong NetId { get; set; }
   public ushort NodeId { get; set; } 
   .
   .
   public ushort SyncDomId { get; set; }
}

public class IenConfig
{
   public int Id { get; set; }
   public ulong NetId { get; set; }
   public ushort NodeId { get; set; } 
}

和数据库上下文

public class MyDbContext : DbContext
{
    ---
    ---
    public DbSet<Models.IenState> IenStateDb { get; set; }
    public DbSet<Models.IenConfig> IenConfig { get; set; }
}

问题: 在控制器的“ GET Edit / id”操作方法中,我想从 IenStateDb 表中读取一个项目,但是将视图作为 IenConfig 项返回。然后,客户端可以更改部分或全部项目(“ Id”字段除外)。然后,已更新的项目通过 POST:Edit / id 方法存储在 IenConigDb 表中。我想找到最有效的编辑方法。目前,我正在执行以下操作:

public async Task<IActionResult> Edit(int? id)
    {
        if (id == null)
        {
            return NotFound();
        }

        var ienState = await _context.IenStateDb.FindAsync(id);
        if (ienState == null)
        {
            return NotFound();
        }

        //Map IenState to IenConfig model object
        IenConfig ienConfig = new IenConfig();

        ienConfig.Id = ienState.Id;
        ienConfig.NetId = ienState.NetId;            
        ienConfig.NodeId = ienState.NodeId;

        return View(ienConfig);
    }

所有这些都有效,但是我不确定这是否是一个好方法。 IenConfig 中参数的数量是 IenState 中参数的子集,但否则它们可能会很大。

1 个答案:

答案 0 :(得分:0)

有效的方法是可以使用Automapper Automapper documentation。 AutoMapper是open source library present in GitHub。要安装该库,请首先安装NuGet Package Manager in your Visual Studio。安装NuGet程序包管理器后,打开NuGet控制台并输入以下命令以安装AutoMapper库:

PM>  Install-Package AutoMapper

下面找到在两个对象类型“ IenState”和“ IenConfig”之间的映射

Mapper.CreateMap<IenConfig, IenState>();

在这里,您将获得IenConfig的映射实例为IenState

var IenConfig = Mapper.Map<IenConfig, IenState>(person);