データベース内のすべてのストアの情報を取得するサービスメソッドがあります。 Auto Mapperを使用してEFからストアをマップし、タイプStoreDTO(シンプルなPOCO)の汎用レスポンスを返します。null以外の値を返した後にメソッドがnull参照例外をスローする
問題はこれです:メソッドは正常に実行され、私は最後までステップします。 response
のすべてのプロパティに値があり、何もnullではありません。リストは項目が移入され、リスト内の項目は、などなど
、有効である。しかし、次のコードはすぐGetAllStores
リターンなどとNullReferenceExceptionがスローされます。
ListResponseDTO<StoreDTO> allStores = Services.Stores.Stores.GetAllStores();
EDIT:ここでのスクリーンショットですデバッガ、それが戻るときに右。ウォッチウィンドウで、値がコーシャーに見えることがわかります。http://i.imgur.com/rd853.png
何か助けていただければ幸いです。
bool Success
:ResponseDTO
は、2つのプロパティを持っている、あなたは不思議に思った場合には
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;
}
:ここ
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定義される:ここではメソッドのコードです
ここでは、例外の詳細は、私はそれがあまりにも便利ではありません怖いです:
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:
try/catchを削除して、何が起こるかを確認してください。 –
同じことです。メソッドに例外がスローされることはなく、メソッドが返った後にスローするだけです。 – lucrativelucas
GetAllStoresメソッドは、あなたが戻った後にNullを取得する唯一の方法のようなものです。なぜなら、これをもう一度新しくするか、オブジェクトをリセットする奇妙な再帰的メソッド/プロパティ呼び出しがあるからです。 =新しいListResponseDTO(「ストアを取得できません」); –
MethodMan