Я использую .NetCore 3.1 Entity Framework для создания игровой онлайн-системы.
У меня есть набор настроек моделей и контроллеров, и каждая модель представляет собой таблицу в моей базе данных MS SQL, и каждая модель имеет контроллер.
Контроллеры для этих моделей работают нормально.
Но теперь у меня есть форма, в которой пользователь будет создавать новый объект, состоящий из двух разных моделей.
Поэтому, когда пользователь отправляет форму, ему нужно будет создать новый элемент в обеих моделях / таблицах.
Поэтому я создал отдельный класс модели именно для этого, например:
namespace My_Game.Models
{
public partial class CreateGame
{
public virtual StarSystem StarSystem { get; set; }
public virtual Ship Ship { get; set; }
}
}
Вот две модели, которые использует вышеуказанная модель:
public partial class StarSystem
{
public string Name { get; set; }
public long Location { get; set; }
}
public partial class Ship
{
public string Name { get; set; }
public string Type { get; set; }
public long MaxCrew { get; set; }
}
А вот мой контроллер, который должен обрабатывать вызов API:
[HttpPost]
public async Task<ActionResult> ProcessForm([FromBody] CreateGame newGameEntry)
{
// Read StarSystem data from form and add to DB via EF
_context.StarSystem.Add(newGameEntry.StarSystem);
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateException)
{
if (StarSystemExists(newGameEntry.StarSystem.Id))
{
return Conflict();
}
else
{
throw;
}
}
// Read mentor data from form and add to DB via EF
_context.Ship.Add(newGameEntry.Ship);
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateException)
{
if (ShipExists(newGameEntry.Ship.Id))
{
return Conflict();
}
else
{
throw;
}
}
return Ok();
}
private bool ShipExists(long id)
{
return _context.Ship.Any(e => e.Id == id);
}
private bool StarSystemExists(long id)
{
return _context.StarSystem.Any(e => e.Id == id);
}
Вот компонент React внешнего интерфейса, который используется для отправки формы в API:
import React, { useState } from 'react';
import axios from 'axios';
const App = () => {
const handleSubmit = (e) => {
e.preventDefault()
const { myForm } = e.target.elements.myForm
axios.post('https://localhost:44376/api/formprocessor', { form: myForm })
}
return (
<div id="newGameForm">
<form id="myForm" onSubmit={handleSubmit}>
<input type="text" name="starSystemName" placeholder="Enter star system name:" />
<input type="text" name="starSystemLocation" placeholder="Enter star system location:" />
<input type="text" name="shipName" placeholder="Enter ship name:" />
<input type="text" name="shipType" placeholder="Enter ship type:" />
<input type="text" name="shipMaxCrew" placeholder="Enter max crew:" />
<button type="submit">Submit</button>
</form>
</div >
)
}
Но всякий раз, когда я пытаюсь поразить контроллер со страницы реакции, я просто получаю эту ошибку в режиме отладки:
Система. ArgumentNullException: Val ты не можешь быть нулем. (Параметр 'entity')
Я также пытался провести тестирование с помощью Postman и поместил фиктивные значения теста в тело, и я получил ту же ошибку.
Чего мне не хватает?
Спасибо!