2017-04-06 4 views
0

ASP.Net Core MVCにWeb APIコントローラがあります。Entity Framework Coreから返されたローカルエンティティを変更した後、私の実行が消えてしまうのはなぜですか?

それは次のようになります。

namespace Hrsa.Core.Web.App.Controllers.Api 
{ 
    [Route("api/[controller]")] 
    public class CasesController : Controller 
    { 
     private readonly IGenericService<Case> _caseGenericService; 

     public CasesController(IGenericService<Case> caseGenericService) 
     { 
      _caseGenericService = caseGenericService; 
     } 

     [HttpPost] 
     public async Task<Case> AddCase([FromBody] EmployeeCaseFromBodyModel model) 
     { 
      Case employeeCase = new Case() 
      { 
       InitalConsultDate = model.InitialConsultDate, 
      }; 

      Case newCase = await _caseGenericService.InsertAsync(employeeCase); 
      EmployeeCase empToCase = new EmployeeCase 
      { 
       CaseId = newCase.Id, 
       EmployeeId = model.EmployeeId 
      }; 
      newCase.EmployeeCases.Add(empToCase); 
      await _caseGenericService.UpdateAsync(newCase); 
      return newCase; 
     } 

    } 
} 

私は戻って、一般的なサービスから私の新しいケースを取得します。 私の新しいケースには、新しく生成されたIDがあります。すばらしいです。

今私は新しく生成されたケースのIDとケースを追加したい従業員IDを持つ新しいEmployeeCaseレコードを作成します。

ここで、EmployeeケースのレコードをEmployeeCasesコレクションに追加するだけです。

しかし、実行が呑み込まれて消えてしまいます。 出力ウィンドウに多数のスレッド終了行があります。

The thread 0x2128 has exited with code 0 (0x0). 
The thread 0x2e38 has exited with code 0 (0x0). 
The thread 0x2d5c has exited with code 0 (0x0). 
The thread 0x2d44 has exited with code 0 (0x0). 
The thread 0x2658 has exited with code 0 (0x0). 

新しいケースは、エンティティフレームワークによって挿入され、返されたらは、ローカル変数newCase変数ではないでしょうか? このような変更はできませんか?

実行はどこにありますか? デバッグ中に次の行にステップすると、スレッドの終了した行が永遠に残っていて、決して次の行に移動しません。

エンティティはまだ何らかの形でdbContextにアタッチされていても放置されませんか? それが私にそれをローカルで働かせないのはなぜですか?

私はちょうどこれをこのようにローカルに変更してから、EmployeeCaseレコードを追加した後で更新のためにエンティティ全体を送信することができたと思いました。 しかし、それはアップデートラインに到達する前に飲み込まれます。

UPDATE 1:だから、何かがでnullである

Exception thrown: 'System.NullReferenceException' in Hrsa.Core.Web.App.dll 

今、私はライン "スレッドnnnはコード0で終了しました" の全ての前に出力ウィンドウに表示この行:

newCase.EmployeeCases.Add(empToCase); 

しかし、私は何がわかりません。

答えて

0

問題は、リストに追加しようとしたときにnewCaseのEmployeeCasesリストがまだnullだったことです。

newCase.EmployeeCases = new List<EmployeeCase>(); 

コンプリートHttpPost:

[HttpPost] 
    public async Task<Case> AddCase([FromBody] EmployeeCaseFromBodyModel model) 
    { 
     Case employeeCase = new Case() 
     { 
      // LerSpecialistId = model.LerSpecialistId, 
      // InitialContactId = model.InitialContactId, 
      InitalConsultDate = model.InitialConsultDate, 
      // Notes = model.Notes 
     }; 

     Case newCase = await _caseGenericService.InsertAsync(employeeCase); 

     newCase.EmployeeCases = new List<EmployeeCase>(); 
     newCase.EmployeeCases.Add(new EmployeeCase 
      { 
       CaseId = newCase.Id, 
       EmployeeId = model.EmployeeId 
      } 
     ); 
     await _caseGenericService.UpdateAsync(newCase); 
     return newCase; 
    } 

私はこの行を追加しました
関連する問題