2013-06-12 14 views
5

VS 2012 (11.0.60315.01 Update 2), C# 5, Entity Framework 5.0.0.0 (Runtime v4.0.30319)Entity Framework 5 - Löschen Child Datensätze

Ich weiß, ähnliche Fragen wurden in der Vergangenheit geschrieben worden, aber Es scheint keine Antwort zu geben. Ich denke, ich verstehe den Fehler, aber ich bin mehr daran interessiert, die "gewünschte" Lösung zu finden. Alles, was ich tun möchte, ist einen Datensatz aus der Child-Tabelle zu löschen. Kann jemand helfen?

Dies ist ein voller und einfache Beispiel. Die Savechanges() wirft die folgende Ausnahme:

„Der Vorgang ist fehlgeschlagen. Die Beziehung konnte nicht geändert werden, da eine oder mehrere der Fremdschlüsseleigenschaften ist nicht auf NULL festlegbare Wenn eine Änderung auf eine Beziehung besteht, Die zugehörige Fremdschlüsseleigenschaft wird auf einen Nullwert gesetzt.Wenn der Fremdschlüssel keine Nullwerte unterstützt, muss eine neue Beziehung definiert werden, der Fremdschlüsseleigenschaft muss ein anderer Nichtnullwert zugewiesen werden oder das nicht verwandte Objekt muss gelöscht werden. "

Der Code sieht wie folgt aus:

using System.Linq; 

namespace EFDeleteTest 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      using (EFTestEntities context = new EFTestEntities()) 
      { 
       var parent = context.Parents.Single(p => p.Id == 1); 

       var child = parent.Children.Single(c => c.Id == 1); 

       parent.Children.Remove(child); 

       context.SaveChanges(); // Throws the above Exception 
      } 
     } 
    } 
} 

Die Datenbank sieht wie folgt aus:

Parent 
    Id (PK, int, not null) IDENTITY 
    Name (nvarchar(50), null) 

Child 
    Id  (PK, int, not null) IDENTITY 
    ParentId (FK, int, not null) -- Foreign Key to the Parent Table (Id column)) 
    Name  (nvarchar(50), null) 

Es gibt einen Datensatz in der übergeordneten Tabelle (Id = 1), und es gibt 2 Datensätze in der Child-Tabelle (Id 1 und 2). Beide Child-Datensätze haben eine ParentId = 1.

+0

Sie sollten mehr Tags in Ihre Frage aufnehmen, wie 'C#', 'VS2012' Tags etc. Sie werden mehr Ansichten und Antworten auf diese Weise erhalten. – Komengem

Antwort

7

Wenn Sie das untergeordnete Objekt nur löschen möchten, sollte das übergeordnete Objekt in der Logik nicht betroffen sein. Versuchen Sie den folgenden Code, lassen Sie mich wissen, was passiert (nicht getestet).

using System.Linq; 

namespace EFDeleteTest 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      using (EFTestEntities context = new EFTestEntities()) 
      {      
       var child = context.Children.Single(c => c.Id == 1); 

       context.Children.Remove(child); 

       context.SaveChanges(); 
      } 
     } 
    } 
} 
+0

Komenge, Sie Code funktioniert. Mein Hauptprojekt (im Moment kein Zugang) ist wahrscheinlich ein wenig komplizierter als dieses Beispiel, aber ich bin mir sicher, dass ich es anpassen kann, um auf ähnliche Weise zu arbeiten. Vielen Dank für Ihre schnelle Antwort. –

Verwandte Themen