![](/img/trans.png)
[英]Mapping multiple table to single DTO in.Entity Framework Core - Some properties are not rendering in JSON output
[英]Getting only some columns in DTO class from table by Entity Framework
我正在使用带有C#的实体框架。 我的数据库中有一个Student表,它有30列 。 而且我只想获取DTO类中表的某些列,而无需编写如下的属性名称 。 我该如何实现?
我的DTO课程:
public class StudentDTO()
{
public long Name{ get; set; }
public long Surname{ get; set; }
public DateTime BirthDate{ get; set; }
public int StudentNumber{ get; set; }
}
我正在寻找这样的东西:
context.Students.Select(p=> new StudentDTO
{
????? StudentDTO.AllProperties ?????
}).ToList();
请不要在解决方案下方提出建议,因为这不是我想要的。
context.Students.Select(p => new
{
p.Name,
p.Surname,
p.BirthDate,
p.StudentNumber
}).ToList();
您是否尝试过Automapper? 只要您的DTO中的属性名称与EF上下文中的属性名称匹配,您就可以很好地完成工作。 在将属性添加到DTO时,它们将自动转换。
如果DTO和EF上下文之间的名称/类型不匹配,则可能需要在映射器配置文件中进行其他配置。
这是一个简化的示例。
class Program
{
static void Main(string[] args)
{
var mapperConfiguration = new MapperConfiguration(cfg => cfg.AddProfile<MappingProfile>());
var mapper = mapperConfiguration.CreateMapper();
var fullStudent = new FullStudent()
{
Name = "Mike",
Surname = "Magoo",
BirthDate = DateTime.Now,
StudentNumber = 1,
Grade = "Freshman",
PhoneNumber = "555-5555"
};
var limitedStudent = mapper.Map<StudentDTO>(fullStudent);
Console.ReadKey();
}
}
public class FullStudent
{
public string Name { get; set; }
public string Surname { get; set; }
public DateTime BirthDate { get; set; }
public int StudentNumber { get; set; }
public string Grade { get; set; }
public string PhoneNumber { get; set; }
}
public class StudentDTO
{
public string Name { get; set; }
public string Surname { get; set; }
public DateTime BirthDate { get; set; }
public int StudentNumber { get; set; }
}
public class MappingProfile : Profile
{
public MappingProfile()
{
CreateMap<FullStudent, StudentDTO>();
}
}
Automapper可以作为nuget软件包安装。
我从@AlexanderDerck的评论中找到了解决方案。 AutoMapper
ProjectTo
方法解决了我的问题。 docs.automapper.org/en/stable/Queryable-Extensions.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.