ama*_*man 2 c# asp.net-mvc entity-framework
我的实体为:
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public string Address { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我有我的UserViewModel作为
public class UserViewModel
{
public int Id { get; set; }
public string Name { get; set; }
public string Address { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我在控制器中如下使用这些:
//This is called from my view via ajax
public void Save(UserViewModel uv)
{
// this throws error: cannot convert from UserViewModel to Entity.User
MyRepository.UpdateUser(uv);
}
Run Code Online (Sandbox Code Playgroud)
我在存储库类中的UpdateUser如下所示:
public void UpdateUser(User u)
{
var user = GetUserDetails(u.Id);
user.Name = u.Name;
user.Address = u.Address;
//using entity framework to save
_context.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
如何将控制器中的UserViewModel正确映射到我的实体
通过使用AutoMapper,您可以执行以下操作:
public void Save(UserViewModel uv)
{
// this throws error: cannot convert from UserViewModel to Entity.User
var config = new MapperConfiguration(cfg => {
cfg.CreateMap<UserViewModel , User>();
});
User u = config.CreateMapper().Map<User>(uv);
MyRepository.UpdateUser(u);
}
Run Code Online (Sandbox Code Playgroud)
或手动:
public void Save(UserViewModel uv)
{
User u = new User()
{
Id = uv.Id
Name = uv.Name;
Address = uv.Address;
};
MyRepository.UpdateUser(u);
}
Run Code Online (Sandbox Code Playgroud)
如果您更改视图模型和模型,则手动执行此操作不是很好,那么您也应该更改代码,但是Automapper不需要更改代码。
编辑1:
这不是好主意,利用模型-视图存储库(数据访问核心),所以它会更好,让您public void UpdateUser(User u)和不改变它,在外面是更好地传递user到UpdateUser不UserViewModel喜欢你以前做过什么。
编辑2:
我认为没有回答的帖子甚至与我的SOC(关注分离)都不相关...
1-当我通过时,UserViewModel我违反了SOC ....
2-另一方面,如果我直接在“ Persentationation”层中有“用户”,我也违反了SOC。
我认为最好的方法是将中间层用作代理。
演示<---->代理<---->存储库。
| 归档时间: |
|
| 查看次数: |
4485 次 |
| 最近记录: |