2016-11-25 3 views
0

У меня есть простая структура БД. Навигация свойство к классу владельца, и я встречаюсь с проблемой, когда я пытаюсь список транспорта создающего с добавлением OwnerName от владельца, потому что OwnerId на транспорте не требуется ...Как создать список из двух соединенных таблиц, когда внешний ключ не требуется, но все равно необходимо получить все записи

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: "В экземпляре объекта не задана ссылка на объект." мне нужно событие список транспорта, если он не имеет владельца ...

+0

Что такое 'Транспорты'? Если это EF-запрос, вы не должны получать NRE. Также вы не сможете использовать 'select new Transport'. –

+0

Прежде всего, я пытаюсь фильтровать объект DBContext.Transports из-за большой суммы, если данные ... поэтому я получаю список фильтров, например. Транспорты = DBContext.Transports.Where (t => t.TransportID == someValue) .toList() – Songaila

+0

Если есть список, тогда вопрос не связан с EF. –

ответ

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

Использование Null-условного оператора поможет избежать NRE.

+0

Постараюсь в понедельник !! – Songaila

+0

Я получаю OwnerID, но null в OwnerName :( – Songaila

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

Вы должны проверить, если владелец является недействительным или нет в запросе.
Измените строку:

OwnerName = n.Owner.OwnerID 

к этому:

OwnerName = n.Owner == null ? "" : n.Owner.OwnerID 
+0

Здесь я получаю нуль в поле OwnerName даже если OwnerId не пустой – Songaila