2012-02-20 13 views
3

データベース内のすべてのストアの情報を取得するサービスメソッドがあります。 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: 
+3

try/catchを削除して、何が起こるかを確認してください。 –

+0

同じことです。メソッドに例外がスローされることはなく、メソッドが返った後にスローするだけです。 – lucrativelucas

+0

GetAllStoresメソッドは、あなたが戻った後にNullを取得する唯一の方法のようなものです。なぜなら、これをもう一度新しくするか、オブジェクトをリセットする奇妙な再帰的メソッド/プロパティ呼び出しがあるからです。 =新しいListResponseDTO (「ストアを取得できません」); – MethodMan

答えて

0

は、あなたはあなたが、彼らはすべてのフィールドを持っていることを確認している店舗のみを返すように、where句を入れ、問題が解決しないかどうかを確認することはできますか?

これは、データセットのどこかにデータが不足していて、デバッグ中に表示されないために発生します。

また、別のtry catchを配置してMapper呼び出しを呼び出し、そこに何かが起きているかどうか確認することもできます。

これは、より多くの提案と答えです。

関連する問題