方法在返回非之后抛出空引用异常

我有一个服务方法,它非常简单地获取数据库中所有商店的信息。 它使用Auto Mapper映射EF的商店,并返回类型为StoreDTO(简单POCO)的通用响应。

问题是这样的:该方法执行得很好,我一直走到最后。 在每个属性response有一个值,没有什么是零。 该列表中填充了项目,列表中的项目是有效的等等。

但是下面的代码在GetAllStores返回时立即抛出一个NullReferenceException:

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:UsersjlucasDocumentsVisual Studio 2010PLM Source ControlUtilitiesInfinityInterfaceInfinityDefault.aspx.cs:line 96
  InnerException: 

你可以放一个where子句,这样你只返回你确定拥有所有字段的商店,看看问题是否存在?

有时候会发生这种情况,因为在数据集中的某处,您有数据丢失,并且在调试期间您看不到它。

你也可以把另一个试图捕获的东西放在Mapper调用中,看看有没有发生。

这是更多的建议,然后一个答案。

链接地址: http://www.djcxy.com/p/68915.html

上一篇: Method throws null reference exception after returning non

下一篇: Can I format NULL values in string.Format?