简体   繁体   English

在数据传输对象中包含相关实体

[英]Including related entities in a Data Transfer Object

I'm attempting to pull a list of meetings with their related bookings. 我试图用相关的预订来列出会议清单。 As I understand it, I should put my data into a DTO. 据我了解,我应该将我的数据放入DTO。 I'm able to get a list of meetings with this... 我能够得到一份会议清单......

        var meetings = from m in db.meetings.Take(2)
                    select new MeetingDTO()
                    {
                        meetingid = m.meetingid,
                        meetingname = m.meeting_name,
                        businessname = m.business.name
                    };

        return meetings;

I've tried several different methods of including the related booking data, but can't figure the syntax out. 我已经尝试了几种不同的方法来包含相关的预订数据,但无法弄清楚语法。

I know this is way off, but this is the idea of what I'm going for... 我知道这是关闭的,但这是我想要的想法......

        var meetings = from m in db.meetings.Take(2)
                    select new MeetingDTO()
                    {
                        meetingid = m.meetingid,
                        meetingname = m.meeting_name,
                        businessname = m.business.name,
                        bookingsDTOs = from b in db.bookings
                                        select new bookingsDTO()
                                        {
                                            bookingid = b.bookingid,
                                            bookingname = b.name
                                        };
                    };

        return meetings;

This is my DTO structure... 这是我的DTO结构......

namespace testapi.Models
{
    public class MeetingDTO
    {
        public int meetingid { get; set; }
        public string meetingname { get; set; }
        public string businessname { get; set; }
        public virtual ICollection<bookingsDTO> bookingsDTOs { get; set; }
    }

    public class bookingsDTO
    {
        public int bookingid { get; set; }
        public string bookingname { get; set; }
    }
}

You can use Include extension method to explicitly load your related entity as part of your query: 您可以使用Include扩展方法将相关实体显式加载为查询的一部分:

var meetings = from m in db.meetings.Include(m=>m.bookings).Take(2)
                select new MeetingDTO()
                {
                    meetingid = m.meetingid,
                    meetingname = m.meeting_name,
                    businessname = m.business.name
                    bookingsDTOs = m.bookings.Select(b=>new bookingsDTO()
                                                       {
                                                         bookingid = b.bookingid,
                                                         bookingname = b.name
                                                       })
                };
return meetings;

To make easier your life I suggest you take a look to Automapper . 为了让您的生活更轻松,我建议您先了解一下Automapper You can do something like this once you configure your mappings: 配置映射后,您可以执行以下操作:

var meetings = from m in db.meetings.Include(m=>m.bookings).Take(2).ProjectTo<MeetingDTO>();

This tutorial is a good start. 教程是一个好的开始。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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