gpt4 book ai didi

c# - 将一个模型转换为另一个模型的通用方法

转载 作者:行者123 更新时间:2023-11-30 20:23:20 25 4
gpt4 key购买 nike

我有两个模型 UserUserModelDto 都有一些共同的属性,从客户端我得到了UserModelDto 模型,我想将其转换为 User 以插入数据库(我正在使用 Entity Framework )。当它转换 UserModelDto 的所有属性值时,我想复制到 User 中,无论该属性是否包含值如果不包含,则手动为其分配适当的值(如 null)。我希望以通用方式获得它。模型 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; }
}

和模型 UserModelDto 看起来像....

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; }
}

我尝试的是

 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;
}

最佳答案

我建议您查看类似 Automapper 的内容这正是你所要求的。它为您提供了很多配置选项,我已经多次将它用于这个确切的用例。

这就是你真正要做的。

//Type on left is source type, type on right is destination
Mapper.CreateMap<UserModelDto, User>();

User user = Mapper.Map<User>(userDto);

UserDtoUser 的另一种方式,您只需创建一个类型翻转的新映射器,并遵循相同的模式。

有一个 nice in depth video这为您提供了更多使用 Automapper 可以做什么的示例,但在这种情况下,默认配置应该可以正常工作。

关于c# - 将一个模型转换为另一个模型的通用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29147591/

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