Метод выдает исключение нулевой ссылки после возврата ненулевого значения - PullRequest
3 голосов
/ 20 февраля 2012

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

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

Но следующий код генерирует исключение NullReferenceException, как только GetAllStores возвращает:

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

РЕДАКТИРОВАТЬ:Вот скриншот отладчика, когда он возвращается.В окне просмотра вы можете видеть, что значения выглядят кошерно: 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

string Message

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

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: 

1 Ответ

0 голосов
/ 22 февраля 2012

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

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

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

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

...