简体   繁体   中英

Including foreign key values into a DTO for a single record

It's been a while since I have done this, but I know there is an easy way to do this that I have forgotten. Below I have a class designed to populate a single record of a data object. But I cannot get the values from another table (related by foreign key) to populate using the lambda statement because I am missing something (the two values being pulled in from another table below can be seen as dto.LeaseName and dto.CarName). How should I write the lambda for the object dm?

    public StationUnloadingLogDTO GetSingleRecordforLog(int Id)
    {
        StationUnloadingLogDTO dto = new StationUnloadingLogDTO();
        StationUnloadingLog dm = new StationUnloadingLog();

        dm = entity.StationUnloadingLog
                .Where(x => x.Id == Id)
                .FirstOrDefault();

        dto.Id = dm.Id;
        dto.DateLogged = dm.DateLogged;
        dto.DriverName = dm.DriverName;
        dto.TruckNumber = dm.TruckNumber;
        dto.CarName = dm.Carrier.CarName;
        dto.CarrierId = dm.CarrierId;
        dto.SpecificGravity = dm.SpecificGravity;
        dto.LactMeterOpen = dm.LactMeterOpen;
        dto.LactMeterClose = dm.LactMeterClose;
        dto.EstimatedBarrels = dm.EstimatedBarrels;
        dto.TicketNumber = dm.TicketNumber;
        dto.LeaseNumber = dm.LeaseNumber;
        dto.LeaseName = dm.Company.CmpName;
        dto.StationId = dm.StationId;

        return dto;
    }

Here are the related data classes

namespace Data.Models
{
    public partial class Company
    {
        public Company()
        {
            StationUnloadingLog = new HashSet<StationUnloadingLog>();
        }

        public string CmpId { get; set; }
        public string CmpName { get; set; }
        public string CmpAddress1 { get; set; }
        public string CmpAddress2 { get; set; }
        public int? CmpCity { get; set; }
        public string CmpZip { get; set; }
        public string CmpPrimaryphone { get; set; }

        public ICollection<StationUnloadingLog> StationUnloadingLog { get; set; }
    }


    public class StationUnloadingLogDTO
    {
        public int Id { get; set; }
        public DateTime? DateLogged { get; set; }
        public string DriverName { get; set; }
        public string TruckNumber { get; set; }
        public string CarrierId { get; set; }
        public string CarName { get; set; }
        public decimal? SpecificGravity { get; set; }
        public decimal? LactMeterOpen { get; set; }
        public decimal? LactMeterClose { get; set; }
        public int? EstimatedBarrels { get; set; }
        public string TicketNumber { get; set; }
        public string LeaseName { get; set; }
        public string LeaseNumber { get; set; }
        public string StationId { get; set; }
    }

    public partial class StationUnloadingLog
    {
        public int Id { get; set; }
        public DateTime? DateLogged { get; set; }
        public string DriverName { get; set; }
        public string TruckNumber { get; set; }
        public string CarrierId { get; set; }
        public decimal? SpecificGravity { get; set; }
        public decimal? LactMeterOpen { get; set; }
        public decimal? LactMeterClose { get; set; }
        public int? EstimatedBarrels { get; set; }
        public string TicketNumber { get; set; }
        public string LeaseNumber { get; set; }
        public string StationId { get; set; }

        public Carrier Carrier { get; set; }
        public Company Company { get; set; }
        public Tractorprofile Tractorprofile { get; set; }
    }

    public partial class Carrier
    {
        public Carrier()
        {
            StationUnloadingLog = new HashSet<StationUnloadingLog>();
        }

        public string CarId { get; set; }
        public string CarName { get; set; }

        public string CarAddress1 { get; set; }
        public string CarAddress2 { get; set; }
        public int? CtyCode { get; set; }
        public string CarZip { get; set; }
        public string CarContact { get; set; }

        public ICollection<StationUnloadingLog> StationUnloadingLog { get; set; }
}

You should query for your record with child entities like this.

dm = DbSet<StationUnloadingLog>
                .Where(x => x.Id == Id).Include(x => x.Carrrier)
                .FirstOrDefault();

You are right, include does the trick. I had to remember to add using Microsoft.EntityFrameworkCore to the page. Forgetting that I think is what confused me, but now I can populate those fields from other tables into the dto. Thanks!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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