Оператор INSERT конфликтовал с ограничением FOREIGN KEY, но внешний ключ существует - PullRequest
1 голос
/ 24 октября 2019

В настоящее время я использую базы данных для проекта 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 для доступа к одной и той же игре более одного раза.

Любой совет будет признателен, спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...