2016-07-20 2 views
0

Я пытаюсь заполнить объект POCO, но я получаю ссылку NullReferenceException - Object, не установленную в экземпляр объекта, в строке «objectAreas.position.Add (objectPositions) ; "Я думаю, что я не инициализируется, но я не вижу свою ошибку, давайте посмотрим код:Заполнение объекта POCO со списком внутри списка

POCO ОБЪЕКТ

public class GenericQuery 
{ 
    public sealed class Areas 
    { 
     public int idarea { get; set; } 
     public string areaname { get; set; } 
     public List<Positions> positions { get; set; } 
    } 

    public sealed class Positions 
    { 
     public int idposition { get; set; } 
     public string positionname { get; set; } 
    } 

    public sealed class QueryAreasPositions 
    { 
     public int code { get; set; } 
     public string response { get; set; } 
     public List<Areas> areas { get; set; } 
    } 
} 

Наполнение Это

GenericQuery.QueryAreasPositions objectAreasPositions = new GenericQuery.QueryAreasPositions(); 

var query = areaRepository.Get(); //Eager Loading EntityFramework List Object, see the AreaRepository at the end 

objectAreasPositions.code = 123; 
objectAreasPositions.response = "anything"; 

foreach (var area in query) 
    { 
     GenericQuery.Areas objectAreas = new GenericQuery.Areas(); 
     objectAreas.idarea = area.IdArea; 
     objectAreas.areaname = area.Name; 
      foreach (var position in area.Position) 
      { 
       GenericQuery.Positions objectPositions = new GenericQuery.Positions(); 
       objectPositions.idposition = position.IdPosition; 
       objectPositions.positionname = position.Name; 
       ***objectAreas.position.Add(objectPositions);***//HERE 
      } 

     objectAreasPositions.areas.Add(objectAreas); //And maybe here 
    } 

AreaRepository

public List<Area> Get() 
{ 
    using (var context = new Entities()) 
    { 
     return context.Area.Include("Position").ToList(); 
    } 
} 

Я был бы признателен за любую помощь/руководство вы можете дать мне, спасибо.

+1

objectAreas .position = new Список (); – Gusman

+0

@ Гусман, спасибо. –

ответ

1

Вы никогда не инициализируется objectAreas.position, следовательно, значение по умолчанию для List<T> является null.

Поскольку вы пытаетесь вызвать метод Add на null ссылке, вы получаете NullReferenceException.

Чтобы исправить это, вы должны инициализировать свойство перед его использованием:

objectAreas.position = new List<GenericQuery.Positions>(); 

В качестве альтернативы, вы можете добавить эту логику GenericQuery.Areas конструктору, который был бы более подходящим:

public sealed class Areas 
{ 
    public int idarea { get; set; } 
    public string areaname { get; set; } 
    public List<Positions> positions { get; set; } 

    public class Areas() 
    { 
     positions = new List<Positions>(); 
    } 
} 
+0

вариант конструктора отлично работает, я понимаю, спасибо. –

0

Разве вы не должны делать это, как показано ниже. Ваш position - это null, причина еще не инициализирована и, следовательно, указанное исключение.

objectAreas.position = new List<Position>(); 
objectAreas.position.Add(objectPositions); 
+0

Спасибо, я не видела свою ошибку. –

Смежные вопросы