Я пытаюсь научиться разрабатывать 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 работает.