ли перечисленные классы в модели (упрощенный):Cascade удаление с EntityFramework
public partial class Category
{
public Category()
{
Topics = new HashSet<Topic>();
}
public Guid Id { get; set; }
public Guid? Category_Id { get; set; }//id for Parent category
public virtual ICollection<Topic> Topics { get; set; }
}
public partial class Topic
{
public Topic()
{
Posts = new HashSet<Post>();
}
public Guid Id { get; set; }
public string Name { get; set; }
public Guid Category_Id { get; set; }
public virtual ICollection<Post> Posts { get; set; }
public virtual Category Category { get; set; }
}
модель здесь:
public partial class EntityModel : DbContext
{
public EntityModel()
: base("name=EntityModelContext")
{
Configuration.LazyLoadingEnabled = true;
Configuration.AutoDetectChangesEnabled = true;
Debug.WriteLine("Context Created");
}
public virtual DbSet<Category> Category { get; set; }
public virtual DbSet<Post> Post { get; set; }
public virtual DbSet<Topic> Topic { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Category>()
.HasMany(e => e.Topics)
.WithRequired(e => e.Category)
.HasForeignKey(e => e.Category_Id)
.WillCascadeOnDelete(true);
modelBuilder.Entity<Topic>()
.HasMany(e => e.Posts)
.WithRequired(e => e.Topic)
.HasForeignKey(e => e.Topic_Id)
.WillCascadeOnDelete(true);
}
}
Так проблема: , когда я пытаюсь удалить подкатегорию (то есть NOT NULL CATEGORY_ID) => удалять успешно, но когда мне нужно удалить корневую категорию (Category_Id = NULL), существует исключение: оператор DELETE противоречил ограничению REFERENCE «FK_Topic_Category». Да, я могу удалить реферативные темы в корневой категории до и после этого удалить категорию. Но хотите знать, почему в корневом случае каскад delete не работает.
Hi Renat. Как вы добавили ON DELETE CASCADE в FK? У меня такая же проблема, но ни одно из решений, на которые я смотрел, похоже, исправляет это. Я использую EF Core 2.0 на SQLite. – Burian