繁体   English   中英

通过实体框架仅从表中获取DTO类中的某些列

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM