当不需要外键但仍需要获取所有记录时如何从两个连接表创建列表

How to create list from two joined tables when foreign key is not required but still need to get all records

我有一个简单的数据库结构。导航 属性 到所有者 class,当我尝试使用所有者添加的所有者名称创建传输列表时遇到问题,因为不需要传输中的所有者 ID...

public Transport()
{
        [Key]
        public int TransportID { get; set; }
        public string PlateNo { get; set; }
        public string Brand { get; set; }
        public string OwnerID { get; set; }
        [ForeignKey("OwnerID")]
        public virtual Owner Owner { get; set;} 

        [NotMapped]
        public string OwnerName { get; set; }
 } 

public partial class Owner
 {
        [Key]
        public string OwnerID { get; set; }
        public string OwnerName { get; set; }
 }

var result = (from n in Transports select new Transport()
 {TransportID=n.TransportID,
  OwnerID = n.OwnerID, 
  OwnerName = n.Owner.OwnerID
 }).ToList();

在执行查询时我得到 System.NullReferenceException: "Object reference not set to an instance of an object." 如果它没有所有者,我需要一个传输列表事件...

var result = (from n in Transports.Include("Owner") select new Transport()
             {TransportID=n.TransportID,
              OwnerID = i.OwnerID, 
              OwnerName = i.Owner.OwnerID
             }).ToList();

您必须检查 Owner 在您的查询中是否为空。
修改你的行:

OwnerName = n.Owner.OwnerID

对此:

OwnerName = n.Owner == null ? "" : n.Owner.OwnerID
 var result = (from n in transports
                          select new Transport()
                          {
                              TransportID = n.TransportID,
                              OwnerID = n.OwnerID,
                              OwnerName = n.Owner?.OwnerName
                          }).ToList();

使用 Null 条件运算符将有助于避免 NRE。