J'ai une exception quand j'appelle SaveChangesAsync. Mon architecture est vraiment simple, j'ai un cours de catégorie, qui contient
public class Category { public Guid ID {get; set;} public Guid? ParentId {get; set;} public Category Parent {get; set;} [...] }
Lorsque je veux insert une nouvelle catégorie dans la database (connecté à mon application ASP MVC), je définis le GUID avant de faire l'insertion. L'erreur est survenue lorsque ma database est vide et que je veux insert la catégorie parente (donc avec un null Guid IdParent et null Parent). Cela ne se produit PAS si je définis une valeur parente. Je peux append un logging manuellement en définissant parent à Null par Visual Studio.
J'ai l'erreur suivante:
L'instruction INSERT était en conflit avec la contrainte FOREIGN KEY SAME TABLE "FK_Category_Category_ParentId". Le conflit s'est produit dans la database "HT_Root", table "dbo.Category", colonne "ID". La déclaration a été résiliée.
- 'System.Data.Entity.ModelConfiguration.ModelValidationException' s'est produit dans EntityFramework.dll mais n'a pas été traité dans le code user
- Asp net mvc 5 Sécurité
- Erreur de connection SQL à l'aide de l'extension mssql du code studio visuel sur macOS
- Base de données Oracle et SQL Server avec le même schéma dans un seul Entity Framework
- Tutoriels ASP.NET MVC utilisant SQLServer?
J'ai cherché sur débordement de stack pour une réponse simple, et je ne l'ai pas trouvé. J'essaye avec l'API Fluent:
modelBuilder.Entity<Category>().HasOne(s => s.Parent).WithMany().HasForeignKey(s => s.ParentId);
Mais rien n'a changé. Qu'est-ce que je fais mal ?
Il semble avoir changé dans EF 7 Voir ce problème de github
Essayer
public class Category { public Guid ID {get; set;} public Guid? ParentId {get; set;} public Category Parent {get; set;} public ICollection<Categories> Children {get; set;} }
Et
modelBuilder.Entity<Category>() .HasOne(x => x.Parent) .WithMany(x => x.Children) .HasForeignKey(x => x.ParentId) .Required(false);
Vous devriez également toujours vérifier que (si spécifié) l'ID Parent existe dans la database. Attention à l'ajout de Guid.Empty
(00000000-0000-0000-0000-000000000000) au lieu de null
car cela peut causer des problèmes.