У меня есть метод сервиса, который очень просто получает информацию для всех магазинов в базе данных. Он отображает хранилища из 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:
Попробуйте удалить попытку/поймать и посмотреть, что произойдет –
То же самое. Он не генерирует исключение в методе, он выдает его только после возвращения метода. – lucrativelucas
Что представляет собой метод GetAllStores, как единственный способ получить Null после возвращения, потому что вы либо обновляете его снова, либо у вас есть нечетный рекурсивный метод/вызов свойства, который сбрасывает объект и почему нужна эта строка? ListResponseDTO ответ = новый ListResponseDTO («Get Stores not successful»); –
MethodMan