正如我在標題中所說,我試圖在 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!;
}
}
謝謝閱讀
uj5u.com熱心網友回復:
該UserProfession屬性的型別為ProfessionDTO:
public virtual ProfessionDTO UserProfession { get; set; } = null!;
但是您試圖用 type 的物件填充它Profession:
UserProfession = user.UserProfession,
正如錯誤所述,它們是不同的型別,不能相互替代。使用以下實體填充屬性ProfessionDTO:
UserProfession = new UserProfessionDTO
{
IdProfession = user.UserProfession.IdProfession,
ProfessionName = user.UserProfession.ProfessionName
},
如果該user.UserProfession欄位是,null那么您需要檢查該欄位。例如:
UserProfession = user.UserProfession == null ?
null as UserProfessionDTO :
new UserProfessionDTO
{
IdProfession = user.UserProfession?.IdProfession,
ProfessionName = user.UserProfession?.ProfessionName
},
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/511427.html
