Quelles sont les causes L'instruction INSERT est en conflit avec la contrainte FOREIGN KEY?
Ce code a fonctionné pour moi avant, mais je ne suis pas sûr de ce qui a été la cause de cette erreur. Ma conjecture est que lorsque j'essaie de créer un Joueur, l'Équipe de Données est envoyé à l'Équipe de la table et de son vouloir copier mais depuis TeamId est unique, d'où cette erreur.
Erreur
L'instruction INSERT en conflit avec la contrainte de CLÉ ÉTRANGÈRE "FK_dbo.Players_dbo.Teams_TeamId". Le conflit est survenu dans la base de données "Web", la table "dbo.Les équipes", la colonne "TeamId'. La déclaration a été résilié.
Joueur
public class Player
{
...
...
[HiddenInput(DisplayValue = false)]
[ForeignKey("Team")]
public int TeamId { get; set; }
public virtual Team Team { get; set; }
...
}
Équipe
public class Team
{
[Key]
[HiddenInput(DisplayValue = false)]
public int TeamId { get; set; }
....
public virtual ICollection<Player> Players { get; set; }
}
Contrôleur
//
//GET: /Player/
[HttpGet]
public ActionResult Create()
{
PopulateTeamsDropDownList();
return View();
}
//
//POST: /Player/
[HttpPost]
public ActionResult Create(Player model)
{
if (ModelState.IsValid)
{
using (var db = new EfDb())
{
var userProfile = db.UserProfiles.Single(u => u.UserName == User.Identity.Name);
if (userProfile != null)
{
var player = new Player
{
UserProfile = userProfile,
....
....
};
db.Players.Add(player);
db.SaveChanges();
}
}
}
PopulateTeamsDropDownList(model.TeamId);
return View(model);
}
private void PopulateTeamsDropDownList(object selectedTeams = null)
{
var teamsQuery = from d in _iService.Teams
orderby d.Name
select d;
ViewBag.TeamID = new SelectList(teamsQuery, "TeamId", "Name", selectedTeams);
}
Vue
<div class="editor-label">
@Html.LabelFor(model => model.TeamId, "Pick Your Team")
</div>
<div class="editor-field">
@Html.DropDownList("TeamId", String.Empty)
@Html.ValidationMessageFor(model => model.TeamId)
</div>
Comment résoudre cette erreur?
source d'informationauteur Komengem
Vous devez vous connecter pour publier un commentaire.
Vous essayez d'effectuer des entités telles que les équipes de votre joueur entité. En particulier les clés étrangères.
Et assurez-vous que le menu Déroulant à partir de votre point de vue est Requis et envoyer la valeur correcte de la méthode post.
La raison derrière cela est lorsque vous insérez un enregistrement sur la
child
table dans laquelle la valeur de référence de colonne n'existe pas encore sur le sur leparent
table.Envisagez le scénario suivant:
Si vous exécutez les instructions ci-dessus, il ne manquera pas, parce qu'aucun d'eux viole l'intégrité référentielle de la règle.
Essayez d'exécuter l'instruction suivante:
Il échoue parce que
4
qui est la valeur deTableA_ID
à être inséré n'existe pas surTable1.ID
. Les Clés étrangères préservé l'intégrité référentielle entre les enregistrements.