数時間前に質問を投稿しましたが、会議に行く前に急いで質問を投稿したため、間違ったことを投稿しました。削除しましたが、正しいバージョンは次のとおりです。
Pomelo を使用して MySQL データベースに接続する EF Core 1.1 を使用して、.Net Core 1.1 Web API を開発しています。正しく接続されますが、特定のレコードを読み取ろうとすると:
http://localhost:50082/api/houses/3
次のエラーが表示されます。
リクエストの処理中に未処理の例外が発生しました。ArgumentOutOfRangeException: インデックスが範囲外でした。負ではなく、コレクションのサイズより小さくなければなりません。パラメータ名: index System.ThrowHelper.ThrowArgumentOutOfRange_IndexException()
これが私のコントローラーの外観です。
private readonly InspectionsContext _context;
// GET: api/Houses/5
[HttpGet("{id}")]
public async Task<IActionResult> GetHouse([FromRoute] int? id)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var house = await _context.Houses.SingleOrDefaultAsync(m => m.HouseId == id);
if (house == null)
{
return NotFound();
}
return Ok(house);
}
エラーは次の行で発生します。
var house= await _context.Houses.SingleOrDefaultAsync(m => m.HouseId == id);
House は、データベース内の対応するテーブルに一致する単なる標準クラスです。そして、データベースには ID = 3 の家があり、家は 1 つだけです。
このエラーが発生する理由はありますか?
アップデート:
エラーの完全な StackTrace は次のとおりです。
Microsoft.EntityFrameworkCore.ChangeTracking.Internal.InternalMixedEntityEntry..ctor(IStateManager stateManager、IEntityType entityType、オブジェクト エンティティ、ValueBuffer valueBuffer) で Microsoft.EntityFrameworkCore.ChangeTracking.Internal.InternalEntityEntryFactory.NewInternalEntityEntry(IStateManager stateManager、IEntityType entityType、オブジェクト エンティティ、ValueBuffer valueBuffer) で Microsoft.EntityFrameworkCore.ChangeTracking.Internal.InternalEntityEntryFactory.Create(IStateManager stateManager、IEntityType entityType、オブジェクト エンティティ、ValueBuffer valueBuffer) Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager で。StartTrackingFromQuery(IEntityType baseEntityType, Object entity, ValueBuffer valueBuffer, ISet
1 handledForeignKeys) at Microsoft.EntityFrameworkCore.Query.Internal.EntityTrackingInfo.StartTracking(IStateManager stateManager, Object entity, ValueBuffer valueBuffer) at Microsoft.EntityFrameworkCore.Query.Internal.QueryBuffer.StartTracking(Object entity, EntityTrackingInfo entityTrackingInfo) at Microsoft.EntityFrameworkCore.Query.Internal.AsyncLinqOperatorProvider.<>c__DisplayClass16_0
2.<_TrackEntities>b__0(TOut result) at Microsoft.EntityFrameworkCore.Query.Internal.AsyncLinqOperatorProvider.SelectAsyncEnumerable2.SelectAsyncEnumerator.<MoveNext>d__4.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.EntityFrameworkCore.Query.Internal.AsyncLinqOperatorProvider.ExceptionInterceptor
1.EnumeratorExceptionInterceptor.d__5.MoveNext() --- 例外がスローされた前の場所からのスタック トレースの終わり --- システムで.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) で System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() で InspectionsWebApi.Controllers.HousesController.d__4.MoveNext() C:\Users\fabsr\Source\Repos\InspectionsWebApi\InspectionsWebApi\Controllers\HousesController.cs:46 行目