EF 7: L'instruction INSERT est en conflit avec la table FOREIGN KEY SAME

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.

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.