0

Im bin ich ein MVCEntity Framework 6DataBase First App.MVC Entity Framework WillCascadeOnDelete funktioniert nicht

Ich habe zwei Tabellen .. Groups Und MemberGroups, mit einer Beziehung eins zu vielen.

Foreign Key can not be Null 

Wenn ich die Datenbank zu meiner Anwendung hinzufügen. Die .Edmx wird mit der Context.cs Datei erzeugt

public partial class PortalEntities : DbContext 
 
    { 
 
     public VIvaVoceEntities() 
 
      : base("name=PortalEntities") 
 
     { 
 
     } 
 
    
 
     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
 
     { 
 
      throw new UnintentionalCodeFirstException(); 
 
     } 
 
      public virtual DbSet<GroupMembers> GroupMembers { get; set; } 
 
      
 
     public virtual DbSet<Groups> Groups { get; set; } 
 
}

Unter .tt Ordner Es ist die class für jede Tabelle erstellt wurde.

public partial class Groups 
 
{ 
 
    public long Group_id { get; set; } 
 
    public string Name { get; set; } 
 
    public virtual ICollection<GroupMembers> GroupMembers { get; set; } 
 
    } 
 
      
 
    public partial class GroupMembers 
 
    { 
 
     public long MemberGroup_ID { get; set; } 
 
     public long Group_id { get; set; } 
 
    }

Ich versuche, ein Delete on cascade zu tun ... Wenn ich eine Gruppe löschen, möchte ich alle Mitglieder in dieser Gruppe löschen. Also in OnModelCreating in Context.cs Datei füge ich alles hinzu, was ich gefunden habe, um auf Kaskade zu löschen, aber nichts funktioniert.

Hier ist was ich bisher versucht habe.

modelBuilder.Entity<Groups>() 
 
      .HasMany(e => e.GroupMembers) 
 
      .WithRequired(e => e.Groups) 
 
      .WillCascadeOnDelete(true); 
 
---------------------------------   
 
      
 
modelBuilder.Entity<Groups>() 
 
    .HasOptional(x => x.GroupMembers) 
 
    .WithOptionalDependent() 
 
    .WillCascadeOnDelete(true);    
 
    
 
--------------------------------- 
 
    
 
modelBuilder.Entity<Groups>().HasMany(i => i.GroupMembers) 
 
      .WithOptional(i => i.Groups) 
 
      .HasForeignKey(i => i.Group_id) 
 
      .WillCascadeOnDelete(true);  
 

 
--------------------------------- 
 
      
 
modelBuilder.Entity<Groups>() 
 
      .HasRequired(e => e.GroupMembers) 
 
      .WithMany() 
 
      .HasForeignKey(e => e.Group_id) 
 
      .WillCascadeOnDelete(true);  

Hier ist der Code, den ich um es zu löschen verwenden.

var master = _db.Set<Groups>().Include(m => m.GroupMembers).SingleOrDefault(m => m.Group_id == 2); 
 
      _db.Set<Groups>().Remove(master); 
 
      _db.SaveChanges();

ich folgende Fehlermeldung haben ...

"The operation failed: The relationship could not be changed because one or more of the foreign-key properties is non-nullable. When a change is made to a relationship, the related foreign-key property is set to a null value. If the foreign-key does not support null values, a new relationship must be defined, the foreign-key property must be assigned another non-null value, or the unrelated object must be deleted."

Es scheint, dass es nicht Kind versucht, Aufzeichnungen zu löschen. Es wird versucht, mit Null zu aktualisieren

Wie ist der richtige Weg, es zu tun.?

Antwort

0

Ich löste mit diesem Code. Es ist keine Kaskade, wie ich es möchte, aber es ist der beste Weg, den ich gefunden habe.

public void Delete(long Group_id) 
 
{ 
 
     Groups group = _db.Set<Groups>().Include(m => m.GroupMembers).SingleOrDefault(m => m.Group_id == Group_id); 
 
     _db.GroupMembers.RemoveRange(group.GroupMembers); 
 
     _db.SaveChanges(); 
 

 
     _db.Entry(group).State = System.Data.Entity.EntityState.Deleted; 
 
     _db.SaveChanges(); 
 
    }

Verwandte Themen