J'ai une application .NET Core 2.1 pour console utilisant EF Core 2.1. Il parle à une base de données pour lire et insérer des lignes. Cette base de données est également mise à jour par d'autres applications en même temps.
Les problèmes que je rencontre sont, je crée une ligne à partir de mon application console, puis une application externe supprime cette ligne, puis lorsque j'essaie à nouveau d'insérer la ligne avec les mêmes clés primaires, je rencontre l'exception ci-dessous -
L'instance de type d'entité 'XYZ' ne peut pas être suivie car une autre instance avec la valeur de clé '{ID: 11, ABC: 136, DEF: 97}' est déjà suivie. Lorsque vous attachez des entités existantes, assurez-vous qu'une seule instance d'entité avec une valeur de clé donnée est attachée.
Ci-dessous mon code
var entity = PopulateValuesFor(XYZ);
var existingXYZ = _Context.TABLE1
.Include(r => r.TABLE2)
.Include(r => r.TABLE3)
.AsNoTracking()
.FirstOrDefault(r => r.Id == 1234);
if (existingXYZ == null)
{
_Context.Add(entity);
}
Le flux est
Comment puis-je dire au DbContext que l'entité n'est plus dans la base de données ... vider vos entrées et rajouter cette ligne à la base de données? Comme il s'agit d'une application console, une seule instance de DbContext est utilisée, qui est injectée dans la classe implémentant cette méthode.
Vous semblez avoir un contexte statique de longue durée. Je suggérerais de résumer ce qui précède dans une déclaration using et de choisir un contexte de courte durée. De cette façon, votre contexte ne pensera pas déjà à son entité insérée.