В настоящее время я использую базы данных для проекта A-Level Computing. Как говорится в вопросе, в настоящее время у меня возникает ошибка при попытке сохранить данные в моей базе данных (UserGameKey). База данных имеет две колонки;GameKey, который является уникальным ключом, и UserGameKeyID, который является внешним ключом, равным идентификатору пользователя из базы данных идентификации.
Эта проблема уже встречалась несколькими людьми, однако ответы на нееданные почти всегда предполагают, что проблема возникает из-за того, что внешний ключ еще не существует в исходной базе данных, из которой он получен. В моем случае это не так - по крайней мере, так не кажется - и поэтому каждый раз, когда я пытаюсь сохранить новую запись в UserGameKey, возникает ошибка;
Оператор INSERT конфликтует свозникает ограничение FOREIGN KEY "FK_UserGameKey_Project_With_IdentityUser_UserGameKeyID"
.
Вот мой файл /play.cshtml, где данные пытаются сохранить из;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.Razor;
using Project_With_Identity.Hubs;
using Microsoft.AspNetCore.Identity;
using Project_With_Identity.Areas.Identity.Data;
using Project_With_Identity.Models;
namespace Project_With_Identity.Pages
{
public class PlayModel : PageModel
{
private readonly UserManager<Project_With_IdentityUser> _userManager;
private readonly SignInManager<Project_With_IdentityUser> _signInManager;
private readonly UserGameKeyContext _gamekeycontext;
public PlayModel(
UserManager<Project_With_IdentityUser> userManager,
SignInManager<Project_With_IdentityUser> signInManager,
UserGameKeyContext gameKeyContext)
{
_userManager = userManager;
_signInManager = signInManager;
_gamekeycontext = gameKeyContext;
}
[BindProperty]
public string gameKey { get; set; }
public async Task<IActionResult> OnPostCreateGame()
{
await createGame();
UserGameKey NewUserGameKey = new UserGameKey { };
NewUserGameKey.UserGameKeyID = _userManager.GetUserId(User);
NewUserGameKey.GameKey = gameKey;
if(_userManager.FindByIdAsync(NewUserGameKey.UserGameKeyID) != null)
{
try
{
_gamekeycontext.UserGameKeys.Add(NewUserGameKey);
_gamekeycontext.SaveChanges();
}
catch (Exception e)
{
Console.Write(e.Message);
return Redirect("./Error");
}
}
var URL = "/Game/" + gameKey + ".cshtml";
return Redirect(URL);
}
//edited for brevity.
}
}
А вот моя модель UserGameKey;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Project_With_Identity.Areas.Identity.Data;
namespace Project_With_Identity.Models
{
public class UserGameKey
{
[Key]
public string GameKey { get; set; }
[ForeignKey("Project_With_IdentityNavi")]
public string UserGameKeyID { get; set; }
public Project_With_IdentityUser Project_With_IdentityNavi { get; set; }
}
}
Моя основная задача - получить /play.cshtml для сохранения нового Gamekey и текущего зарегистрированного идентификатора пользователя в базе данных UserGameKey, чтобы пользователь мог использоватьодин и тот же Gamekey для доступа к одной и той же игре более одного раза.
Любой совет будет признателен, спасибо!