我有一个服务方法,可以非常简单地获取数据库中所有商店的信息。它使用Auto Mapper从EF映射存储,并返回StoreDTO类型的通用响应(简单的POCO)。
问题在于:方法执行得很好,我一直走到最后。 response
中的每个属性都有一个值,没有任何内容为null。列表中填充了项目,列表中的项目有效等等。
但是,只要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:\Users\jlucas\Documents\Visual Studio 2010\PLM Source Control\Utilities\InfinityInterface\Infinity\Default.aspx.cs:line 96
InnerException:
答案 0 :(得分:0)
你可以放一个where子句,这样你只返回你确定他们有所有字段的商店,看看问题是否仍然存在?
这种情况有时会发生,因为在数据集的某个地方,您丢失了数据,而在调试过程中您却看不到它。
您还可以添加另一个试图捕获Mapbox调用并查看是否发生了某些事情。
这是更多的建议,然后是答案。