简体   繁体   中英

Entity framework - Delete cascade

when I create my DbContext, I want all tables in my database to have delete-cascade enabled. Is it possible?

I have two tables with FK. The classes are

public class Child
{
    public int ChildID { get; set; }
    public string Name { get; set; }
    public virtual Parent parent { get; set; }
}

public class Parent
{
    public int ParentID { get; set; }
    public string Name {get;set;}        
}       

public class iMyContext : DbContext
{
    public iMyContext(string connectionString)
        : base(connectionString)
        {
        }


    public virtual DbSet<Child> Children { get; set; }
    public virtual DbSet<Parent> Parents { get; set; }  
}

On creating my context, I get tables as

Parents with columns
ParentID PK
Name

Children with columns
ChildID PK
Name
Parent FK

Now when I add

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Child>()
        .HasOptional(r => r.Parent)
        .WithRequired(ad => ad.)   // problem here
        .WillCascadeOnDelete();

    }

The WithRequired clause does not have Child. How do I solve that?

Cascade delete could be setup using FluentAPI in OnModelCreating method:

modelBuilder.Entity<Root>()
            .HasMany(r => r.Nodes)
            .WithRequired(n => n.Root)
            .WillCascadeOnDelete();

UPD: Lets assume you have two entities Root and Node, which are connected with one-to-many relationship using DataAnnotations attributes:

public class Root
{
    [Key]
    public int RootId { get; set; }

    public string RootName { get; set; }

    [InverseProperty("Root")]
    public ICollection<Node> Nodes { get; set; }
}

public class Node
{
    [Key]
    public int NodeId { get; set; }

    public string NodeName { get; set; }

    [ForeignKey("Root")]
    public int RootId { get; set; }

    public Root Root { get; set; }
}

Now if you want to delete all Nodes while deleting the Root they're depend on, you need to configure this using FluenAPI in OnModelCreating method of your context configuration class using the code I introduced above before the UPD.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM