Невозможно привести объект типа «System.DBNull» к типу «System.Int32» ASP.NET. - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь научиться разрабатывать API с ASP.NET.Все идет хорошо, пока я не попытаюсь соединить 2 таблицы между внешним ключом.Поэтому я прочитал этот документ , чтобы понять, как работать с внешним ключом.Мой пользовательский объект выглядит так:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using MyApp.Utils;


namespace MyApp.Models.DataModels
{
    public abstract class UserBase
    {
        [Key]
        public int id_usr { get; set; }

        public string name_usr { get; set; }
        public string surname_usr { get; set; }
        [EmailAddress]
        public string email_usr { get; set; }
        public int fk_prf_usr { get; set; }
        [ForeignKey("fk_prf_usr")]
        public ProfileModel profile { get; set; }
    }

    public class DbUser : UserBase
    {
        private string _password;
        public string password_usr
        {
            get
            {
                return _password;
            }
            set
            {
                _password = value.StrongHash();
            }
        }
    }
}

Когда я запускаю это и пытаюсь получить пользователей, он показывает мне эту страницу:

An unhandled exception occurred while processing the request.

InvalidCastException: Unable to cast object of type 'System.DBNull' to type 'System.Int32'.
MySqlConnector.Core.Row.GetInt32(int ordinal) in C:\projects\mysqlconnector\src\MySqlConnector\Core\Row.cs, line 177

Stack Query Cookies Headers
InvalidCastException: Unable to cast object of type 'System.DBNull' to type 'System.Int32'.
MySqlConnector.Core.Row.GetInt32(int ordinal) in C:\projects\mysqlconnector\src\MySqlConnector\Core\Row.cs
lambda_method(Closure , DbDataReader )
Microsoft.EntityFrameworkCore.Storage.Internal.TypedRelationalValueBufferFactory.Create(DbDataReader dataReader)
Microsoft.EntityFrameworkCore.Query.Internal.AsyncQueryingEnumerable<T>+AsyncEnumerator.BufferlessMoveNext(DbContext _, bool buffer, CancellationToken cancellationToken)
Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlExecutionStrategy.ExecuteAsync<TState, TResult>(TState state, Func<DbContext, TState, CancellationToken, Task<TResult>> operation, Func<DbContext, TState, CancellationToken, Task<ExecutionResult<TResult>>> verifySucceeded, CancellationToken cancellationToken)
Microsoft.EntityFrameworkCore.Query.Internal.AsyncQueryingEnumerable<T>+AsyncEnumerator.MoveNext(CancellationToken cancellationToken)
System.Linq.AsyncEnumerable+SelectEnumerableAsyncIterator<TSource, TResult>.MoveNextCore(CancellationToken cancellationToken) in D:\a\1\s\Ix.NET\Source\System.Interactive.Async\Select.cs
System.Linq.AsyncEnumerable+AsyncIterator<TSource>.MoveNext(CancellationToken cancellationToken) in D:\a\1\s\Ix.NET\Source\System.Interactive.Async\AsyncIterator.cs
Microsoft.EntityFrameworkCore.Query.Internal.AsyncLinqOperatorProvider+ExceptionInterceptor<T>+EnumeratorExceptionInterceptor.MoveNext(CancellationToken cancellationToken)
System.Linq.AsyncEnumerable.Aggregate_<TSource, TAccumulate, TResult>(IAsyncEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> accumulator, Func<TAccumulate, TResult> resultSelector, CancellationToken cancellationToken) in D:\a\1\s\Ix.NET\Source\System.Interactive.Async\Aggregate.cs
JoinUpp.API.Controllers.UsersController.GetUsers() in UsersController.cs
+
            return await _context.user_usr.ToListAsync();
lambda_method(Closure , object )
Microsoft.Extensions.Internal.ObjectMethodExecutorAwaitable+Awaiter.GetResult()
Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor+AwaitableObjectResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, object controller, object[] arguments)
System.Threading.Tasks.ValueTask<TResult>.get_Result()
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeActionMethodAsync()
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeNextActionFilterAsync()
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext context)
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeInnerFilterAsync()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResourceFilter()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext context)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync()
Microsoft.AspNetCore.Routing.EndpointMiddleware.Invoke(HttpContext httpContext)
Microsoft.AspNetCore.Routing.EndpointRoutingMiddleware.Invoke(HttpContext httpContext)
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

И я не знаю, как исправитьЭто проблема, я надеюсь, что кто-то может помочь мне решить эту проблему.Я думаю, что это зависит от этих строк:

public int fk_prf_usr { get; set; }
[ForeignKey("fk_prf_usr")]
public ProfileModel profile { get; set; }

, потому что, если я комментирую эти строки, мой API работает.

...