0

数時間前に質問を投稿しましたが、会議に行く前に急いで質問を投稿したため、間違ったことを投稿しました。削除しましたが、正しいバージョンは次のとおりです。

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, ISet1 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_02.<_TrackEntities>b__0(TOut result) at Microsoft.EntityFrameworkCore.Query.Internal.AsyncLinqOperatorProvider.SelectAsyncEnumerable 2.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.ExceptionInterceptor1.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 行目

4

2 に答える 2