2016-06-23 7 views
2

Ich benutze zuerst EF6-Code, wenn ich eine Child-Sammlung ändere, dann speichere Save, das Speichern läuft, aber die Db-Zeile wird nicht gelöscht, nur dort ist der Fremdschlüssel auf null gesetzt.Wie kann ich EF6 veranlassen, ein Objekt aus der Datenbank zu entfernen, wenn es aus einer Sammlung entfernt wird?

Grundmodell

public class Building 
{ 
    int Id {get;set;} 
    ICollection<BuildingFloors> BuildingFloors 
}  

public class BuildingFloors 
{ 
    int id 
} 

ich in der DbContext die Kaskade setzte wie

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Model.Building>() 
       .HasMany(t => t.BuildingFloors) 
       .WithOptional(d => d.Building) 
       .WillCascadeOnDelete(true); 

    base.OnModelCreating(modelBuilder); 
} 

Dann, wenn die Sammlung Speicher i die aktuelle Liste bin zu löschen.

building.BuildingFloors.Clear(); 

dann die neuen Werte hinzufügen.

Wie kann ich EF veranlassen, ein Objekt aus der Datenbank zu entfernen, wenn es aus der Sammlung entfernt wird?

+0

Sie können nicht sein. Wenn Sie jedoch ein Objekt aus dbcontext entfernen, wird es ebenfalls aus der Sammlung entfernt. –

+0

BTW. Wenn Sie die Beziehungen zu "Eins zu Viele" anstatt "Eins/Null" ändern, funktioniert es sofort. –

+0

Können Sie mir erklären, wie ich das machen könnte? – TheAlbear

Antwort

0

tmg. Recht hatte, mit der Ausnahme, dass ich die forign Schlüsselbeziehung

so buildingfloors Klasse

muss gesetzt auch benötigt
public class BuildingFloors 
{ 
    int id 

    //forgin key 
    int Building_Id 
} 

und die Zuordnung muss sein

modelBuilder.Entity<Model.Building>() 
    .HasMany(t => t.BuildingFloors) 
    .WithRequired() 
    .HasForeignKey(t => t.Building_Id) 
    .WillCascadeOnDelete(true);