3

У меня есть метод сервиса, который очень просто получает информацию для всех магазинов в базе данных. Он отображает хранилища из EF с помощью Auto Mapper и возвращает общий ответ типа StoreDTO (простой POCO).Метод выбрасывает исключение ссылочной ссылки после возврата ненулевого значения

Проблема заключается в следующем: метод выполняется просто отлично, я прохожу весь путь до конца. Каждое свойство в response имеет значение, ничего не равно null. Список заполняется с элементами, элементы в списке являются действительными, и т.д. и т.п.

Но следующий код бросает NullReferenceException как только GetAllStores возвращается:

ListResponseDTO<StoreDTO> allStores = Services.Stores.Stores.GetAllStores(); 

EDIT: Вот скриншот из отладчик, когда он возвращается. Вы можете видеть в окне часов, что значения выглядят кошерными: http://i.imgur.com/rd853.png

Любая помощь очень ценится. Вот код из метода:

public static ListResponseDTO<StoreDTO> GetAllStores() 
    { 
     ListResponseDTO<StoreDTO> response = new ListResponseDTO<StoreDTO>("Get Stores not successful"); 

     try 
     { 
      response.Items = new List<StoreDTO>(); 
      using (DomainEntities db = new DomainEntities(Global.ConnectionString)) 
      { 
       foreach (var IndividualStore in db.Stores) 
       { 
        Mapper.CreateMap<Store, StoreDTO>(); 
        var IndividualStoreDTO = Mapper.Map<Store, StoreDTO>(IndividualStore); 
        response.Items.Add(IndividualStoreDTO); 
       } 
      } 
      response.Message = "Store(s) retrieved successfully"; 
      response.Success = true; 
     } 
     catch (Exception ex) 
     { 
      Logging.Log("Get All Stores", response.Message + " " + ex.ToString(), Logging.LogPriority.Error, "Store Operations"); 
     } 
     return response; 
    } 

Здесь родовое определение DTO:

public class ListResponseDTO<DtoType> : ResponseDTO 
{ 
    public ListResponseDTO() 
     : base() 
    { 
     Items = new List<DtoType>(); 
    } 

    public ListResponseDTO(string defaultMessage) 
     : base(defaultMessage) 
    { 
     Items = new List<DtoType>(); 
    } 

    public List<DtoType> Items; 
} 

В случае, если вам интересно, ResponseDTO имеет два свойства:

bool Success

Здесь детали исключения, я боюсь, что это не слишком полезно:

System.NullReferenceException was unhandled by user code 
    Message=Object reference not set to an instance of an object. 
    Source=Infinity 
    StackTrace: 
    at PLM.Infinity.Default.GetDrawersForUser() in C:\Users\jlucas\Documents\Visual Studio 2010\PLM Source Control\Utilities\InfinityInterface\Infinity\Default.aspx.cs:line 96 
    InnerException: 
+3

Попробуйте удалить попытку/поймать и посмотреть, что произойдет –

+0

То же самое. Он не генерирует исключение в методе, он выдает его только после возвращения метода. – lucrativelucas

+0

Что представляет собой метод GetAllStores, как единственный способ получить Null после возвращения, потому что вы либо обновляете его снова, либо у вас есть нечетный рекурсивный метод/вызов свойства, который сбрасывает объект и почему нужна эта строка? ListResponseDTO ответ = новый ListResponseDTO («Get Stores not successful»); – MethodMan

ответ

0

Вы можете поставить где положение, так что вы возвращать только магазины, которые вы уверены, что у них есть все поля, и посмотреть, если проблема не решена?

Это несколько раз происходит потому, что где-то в вашем наборе данных у вас отсутствуют данные, а во время отладки вы его не видите.

Вы также можете поставить еще одну попытку поймать, чтобы ящики отображали вызов Mapper и видели, что там что-то происходит.

Это больше предложений, чем ответа.

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