2015-06-12 2 views
0

ли перечисленные классы в модели (упрощенный):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 не работает.

ответ

0

ok, только что добавлено в УДАЛИТЬ КАСКАД к FK дочерних объектов в аннотации DB.

+0

Hi Renat. Как вы добавили ON DELETE CASCADE в FK? У меня такая же проблема, но ни одно из решений, на которые я смотрел, похоже, исправляет это. Я использую EF Core 2.0 на SQLite. – Burian

Смежные вопросы