2017-10-19 1 views
0

Ich versuche, meine Entität mit ihr verbundenen Entität zu entfernen, aber Entity Framework will dies nicht tun. HierEF Core nicht löschen verbundene Einheit

ist der Code:

 var tr = _context.Trees 
      .Include(x => x.Translation) 
      .FirstOrDefault(x => x.Id == 2); 

     _context.Remove(tr); 
     _context.SaveChanges(); 

Kontext:

modelBuilder.Entity<Tree>().ToTable("h_tree"); 
    modelBuilder.Entity<Tree>().HasOne(x => x.Translation); 

Tree-Klasse:

public class Tree 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public virtual Translation Translation { get; set; } 
} 

Jedermann haben Ahnung, warum verbundene Einrichtung nicht entfernt werden kann?

Übersetzung Klasse:

public class Translation 
{ 
    public long Id { get; set; } 
    public string Pl { get; set; } 
    public string En { get; set; } 
    public string De { get; set; } 
    public string Cz { get; set; } 
    public string It { get; set; } 
    public string Ru { get; set; } 
    public string Fr { get; set; } 

    public Translation() 
    { 

    } 
} 
+0

Gibt es tatsächlich einen Datensatz mit id == 2 im Datensatz? –

+0

Ja natürlich. Dies ist ein EF-Protokoll: SET NOCOUNT ON; LÖSCHEN VON [Katze]. [H_Tree] WHERE [ID] = @ p0; SELECT @@ ROWCOUNT; – bielu000

Antwort

1

Sie scheinen verpasst zu haben, zu sagen, ob dies eine Beziehung Eins-zu-eins oder eins-zu-viele ist.

.HasOne() muss mit einer .With*() Methode gepaart werden. Entweder .WithOne() oder .WithMany().


Es scheint, dass Ihre Übersetzungsklasse einen Fremdschlüssel fehlt.

Fügen Sie eine Eigenschaft namens TreeId hinzu und verwenden Sie diese in Ihrem .WithOne() Anruf.

+0

Ich habe diese Syntax versucht: modelBuilder.Entity () .HasOne (x => x.Translation) .WithOne(). OnDelete (DeleteBehavior.Cascade); aber es funktioniert nicht. – bielu000

+0

Ich habe folgende Fehlermeldung: Die untergeordnete/abhängige Seite konnte nicht für die Eins-zu-eins-Beziehung ermittelt werden, die zwischen 'Tree.Translation' und 'Translation' erkannt wurde. Um die untergeordnete/abhängige Seite der Beziehung zu identifizieren, konfigurieren Sie die Fremdschlüsseleigenschaft. – bielu000

+0

@ bielu000 Also, was * ist * dein Fremdschlüsselfeld in 'Translation' und warum hast du es nicht in deine .WithOne-Methode geschrieben? – nvoigt