表
我用外键关系创建了这样的表。
create table Departments
(
Id int primary key identity,
Name varchar(100)
)create table Employees
(
Id int primary key identity,
Name nvarchar(max),
Salary decimal,
DepartmentId int foreign key references Departments(Id)
)模型
我建立了员工和部门的关系模型
public class Employees
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Salary { get; set; }
public int DepartmentId { get; set; }
public virtual Departments Department { get; set; }
}public class Departments
{
public int Id { get; set; }
public string Name { get; set; }
public virtual List<Employees> Employees { get; set; }
}ViewModel
这是显示员工和部门数据的视图模型。在这里,我还想向DepartmentName展示
public class EmployeesVM
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Salary { get; set; }
public int DepartmentId { get; set; }
public string DepartmentName { get;set; }
}Auto类
namespace EmployeeDetails.Helpers
{
public class AutoMapperHelper:Profile
{
public AutoMapperHelper()
{
CreateMap<Employees, EmployeesVM>()
.ForMember(dest => dest.DepartmentName, opt => { opt.MapFrom(src => src.Department.Name); });
}
}
}Index.cshtml.cs
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace EmployeeDetails.Pages
{
public class IndexModel : PageModel
{
private readonly ILogger<IndexModel> _logger;
private readonly ApplicationContext _context;
private readonly IMapper _mapper;
public IndexModel(ILogger<IndexModel> logger,ApplicationContext context,IMapper mapper)
{
_logger = logger;
_context = context;
_mapper = mapper;
}
[BindProperty]
public List<EmployeesVM> EmployeesVM { get; set; }
public void OnGet()
{
var result = _context.Employees.ToList();
EmployeesVM = _mapper.Map<List<EmployeesVM>>(result);
}
}
}您可以在图像'DepartmentName‘中看到null:

发布于 2022-09-25 12:55:38
通过模型中的导航属性,有3种不同的加载相关实体方法。在您的情况下,似乎没有启用懒惰加载 (就我个人而言,我不太喜欢它),所以您需要使用显式加载或使用急装
var result = _context.Employees
.Include(e => e.Department)
.ToList();
EmployeesVM = _mapper.Map<List<EmployeesVM>>(result);UPD
另外,您可能希望使用AutoMapper的has 可查询扩展来防止通过ProjectTo<>方法过度获取句柄关系,该方法将告诉AutoMapper的映射引擎向IQueryable发出select子句,该子句将通知实体框架它只需要查询某些字段。
请注意,ProjectTo在支持映射(请参阅文档的这一部分)方面有很多限制。
https://stackoverflow.com/questions/73843406
复制相似问题