Bien que ce ne soit probablement pas la meilleure pratique, j'essaie d'effacer une série d'enregistrements d'une table de base de données, puis d'insérer une série d'enregistrements - dont certains peuvent avoir été dans la série originale, et d'autres qui peuvent être nouveaux. J'utilise linqtosql en C#. Pseudo-code que je dois faire est ci-dessous; il échoue avec "Impossible d'ajouter une entité avec une clé déjà utilisée".LinqtoSQL - effacement puis insertion
using (dbDataContext context = new dbDataContext()
{
// I've also tried using table.LinkedTable.Clear(); but that shows the same error
while (table.LinkedTable.Count() > 0)
{
table.LinkedTable.RemoveAt(0);
}
foreach (ListItem item in SelectedItems.Items)
{
LinkedTable lt = new LinkedTable();
lt.id = table.id;
lt.SomeValue = item.SelectedValue;
table.LinedTable.Add(lt);
}
context.SubmitChanges();
}
Il semble que LinqToSql ne prend pas la note que je l'ai supprimé des éléments, avant d'essayer d'ajouter des éléments, ce qui provoque une erreur de duplication. Est-ce que quelqu'un a des suggestions pour corriger cela? Si j'ajoute un SubmitChanges après avoir effectué les suppressions, je me retrouve avec ce message.
"Une tentative de suppression d'une relation entre une table et un LinkedTable a été effectuée, mais l'une des clés étrangères de la relation (LinkedTable.Id) ne peut pas être définie sur null."
Qu'est-ce qui se passe lorsque vous insérez un "context.SubmitChanges();" appelez entre le nettoyage de votre table et l'insertion de nouveaux enregistrements? –