背景:在我的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 中参数的子集,但否则它们可能会很大。
答案 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);