J'ai l'entité suivante:Selft tableau faisant référence à EntityFramework (Insérer erreur)
public class Category
{
public virtual long Id { get; set; }
public string Name { get; set; }
public virtual long ParentId { get; set; }
public virtual Category Parent { get; set; }
public virtual List<Category> Categories { get; set; }
}
public class CategoryConfiguration:
EntityTypeConfiguration<Category>
{
public CategoryConfiguration()
{
this.HasKey(entity => entity.Id);
this.Property(entity => entity.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
this.HasRequired(entity => entity.Parent).WithMany(entity => entity.Categories).HasForeignKey(entity => entity.ParentId);
this.HasMany(entity => entity.Categories).WithRequired(entity => entity.Parent).HasForeignKey(entity => entity.ParentId);
this.Property(entity => entity.Name).IsRequired().HasMaxLength(1000);
}
}
EF est en mesure de créer le schéma très bien mais a des problèmes lors de l'insertion des données avec le code suivant:
var category = new Category();
category.Name = "1";
category.Description = "1";
category.Parent = category;
using (var context = new Context())
{
context.Categories.Add(category);
context.SaveChanges();
}
erreur: Unable to determine a valid ordering for dependent operations. Dependencies may exist due to foreign key constraints, model requirements, or store-generated values.
Je suppose que cela est dû au champ ParentId
étant non-nullable
(ce qui est le intentio n). Sans l'utilisation d'un ORM, normalement:
- Définissez le type de colonne sur
nullable
. - Créez une catégorie principale pour générer automatiquement la clé primaire.
- Définissez
ParentId
sur la clé primaire nouvellement générée. - Définissez à nouveau le type de colonne
non-nullable
.
Comment pourrais-je réaliser cela avec EntityFramework?
Je ne pense pas que vous pouvez insérer une ligne dans la table SQL qui se réfère à elle-même et la référence est non nulle et c'est le problème principal ici. –