Er_*_*iya 2 c# generics model-view-controller model
我有两个模型User和UserModelDto都有一些共同的属性,从客户端我得到了UserModelDto模型,我想将其转换为User以插入数据库(我正在使用实体框架)。当它将UserModelD 的所有属性值转换为UserModelD 时,我想将该属性是否包含值复制到User 中,如果不包含,则手动分配给它的适当值(如空值)。我希望它以通用方式。模型 用户看起来像
public partial class User
{
public User()
{
this.UserRoles = new HashSet<UserRole>();
}
public int Id { get; set; }
public string UserName { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string EmailId { get; set; }
public string Password { get; set; }
public Nullable<int> ManagerId { get; set; }
public byte AuthenticationType { get; set; }
public Nullable<bool> RememberMe { get; set; }
public Nullable<bool> IsActive { get; set; }
public Nullable<bool> IsOnVacation { get; set; }
public Nullable<bool> IsManager { get; set; }
public Nullable<int> CreatedBy { get; set; }
public Nullable<int> UpdatedBy { get; set; }
public Nullable<System.DateTime> CreatedOn { get; set; }
public Nullable<System.DateTime> UpdatedOn { get; set; }
public int LoginAttempts { get; set; }
public bool ResetPassword { get; set; }
public Nullable<System.DateTime> LastDealAssignedDateTime { get; set; }
public virtual ICollection<UserRole> UserRoles { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和模型UserModelD看起来像....
public class UserModelDto
{
public int UserId { get; set; }
public string UserName { get; set; }
public byte AuthenticationType { get; set; }
public string EmailId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public bool IsOnVacation { get; set; }
public bool IsManager { get; set; }
public bool IsActive { get; set; }
public int ManagerId { get; set; }
public int PrimaryRoleid { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我试过的是
public User ConvertToUserModel(UserModelDto userModel)
{
User convertedUser = new User();
if (userModel!=null)
{
convertedUser.Id = userModel.UserId != null ? userModel.UserId : 0;
convertedUser.AuthenticationType = userModel.AuthenticationType != null ? userModel.AuthenticationType : 0;
convertedUser.EmailId = userModel.EmailId != null ? userModel.EmailId :null;
convertedUser.FirstName = userModel.FirstName != null ? userModel.FirstName : null;
convertedUser.LastName = userModel.LastName != null ? userModel.LastName : null;
convertedUser.IsOnVacation = userModel.IsOnVacation != null ? userModel.IsOnVacation : false;
convertedUser.IsActive = userModel.IsActive != null ? userModel.IsActive : false;
convertedUser.IsManager = userModel.IsManager != null ? userModel.IsManager : false;
convertedUser.ManagerId = userModel.ManagerId != null ? userModel.ManagerId :0;
convertedUser.UserName = userModel.UserName != null ? userModel.UserName :null;
}
return convertedUser;
}
Run Code Online (Sandbox Code Playgroud)
我建议你看看像Automapper这样的东西,它完全符合你的要求。它允许你有很多配置选项,我已经多次将它用于这个确切的用例。
这就是您实际上会做的事情。
//Type on left is source type, type on right is destination
Mapper.CreateMap<UserModelDto, User>();
User user = Mapper.Map<User>(userDto);
Run Code Online (Sandbox Code Playgroud)
如果要从其他的方式UserDto
来User
,你只需创建一个翻转的类型的新映射,并遵循相同的模式。
有一个很好的深度视频,为您提供了更多关于 Automapper 可以做什么的示例,但在这种情况下,默认配置应该可以正常工作。