【问题标题】:Web API C# .net: cannot convert the model in the dto in get methodWeb API C# .net:无法在 get 方法中转换 dto 中的模型
【发布时间】:2022-10-04 19:53:15
【问题描述】:

正如我在标题中所说,我试图在 get 方法中将模型对象转换为其 DTO。

我的方法是获取用户,是下一段代码:

// GET: api/Users
[HttpGet]
public async Task<ActionResult<IEnumerable<UserDTO>>> GetUsers()
{
    var users = _context.Users.ToList();
    var userDtos = new List<UserDTO>();
    foreach (var user in users)
    {
        userDtos.Add(new UserDTO 
        { 
            IdUser = user.UserProfessionId, 
            UserName = user.UserName, 
            UserCompany = user.UserCompany, 
            UserMail = user.UserMail, 
            UserProfession = user.UserProfession, 
            UserProfessionField = user.UserProfessionField 
        });
    }
    return userDtos;
}

这些是我的模型和用户 DTO:

namespace Sims.Models
{
    public partial class User
    {
        public User()
        {
            DataUsages = new HashSet<DataUsage>();
        }

        public long IdUser { get; set; }
        public int UserProfessionId { get; set; }
        public int UserProfessionFieldId { get; set; }
        public string? UserName { get; set; }
        public string? UserMail { get; set; }
        public string? UserCompany { get; set; }
        public byte[]? UserPicture { get; set; }

        public virtual Profession UserProfession { get; set; } = null!;
        public virtual ProfessionField UserProfessionField { get; set; } = null!;
        public virtual ICollection<DataUsage> DataUsages { get; set; }
    }
}

namespace sims.DTO
{
    public partial class UserDTO
    {
        public long IdUser { get; set; }
        public string? UserName { get; set; }
        public string? UserMail { get; set; }
        public string? UserCompany { get; set; }

        public virtual ProfessionDTO UserProfession { get; set; } = null!;
        public virtual ProfessionFieldDTO UserProfessionField { get; set; } = null!;
    }
}

Profession 和 ProfessionField 也是模型,有自己的 DTO。但是在 get 方法中,以下两行包含相同的错误,因为它“无法将类型 '....Models.Profession' 隐式转换为 '....DTO.ProfessionDTO'”。

你有什么主意吗 ?

以防万一,这里是专业模型和 DTO 的示例:

namespace Sims.Models
{
    public partial class Profession
    {
        public Profession()
        {
            ProfessionFields = new HashSet<ProfessionField>();
            Users = new HashSet<User>();
        }

        public int IdProfession { get; set; }
        public string ProfessionName { get; set; } = null!;

        public virtual ICollection<ProfessionField> ProfessionFields { get; set; }
        public virtual ICollection<User> Users { get; set; }
    }
}

namespace sims.DTO
{
    public class ProfessionDTO
    {
        public int IdProfession { get; set; }
        public string ProfessionName { get; set; } = null!;
    }
}

谢谢阅读

【问题讨论】:

    标签: c# asp.net asp.net-web-api


    【解决方案1】:

    UserProfession 属性的类型为 ProfessionDTO

    public virtual ProfessionDTO UserProfession { get; set; } = null!;
    

    但是你试图用Profession 类型的对象填充它:

    UserProfession = user.UserProfession,
    

    正如错误所述,它们是不同的类型,不能相互替代。改为使用 ProfessionDTO 的实例填充属性:

    UserProfession = new UserProfessionDTO
    {
        IdProfession = user.UserProfession.IdProfession,
        ProfessionName = user.UserProfession.ProfessionName
    },
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-23
      • 1970-01-01
      • 1970-01-01
      • 2017-07-10
      • 1970-01-01
      • 2021-05-26
      • 1970-01-01
      相关资源
      最近更新 更多