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 - Eliminazione figlio record

so domande simili sono stati pubblicati in passato, ma non sembra essere una risposta. Penso di capire l'errore, ma sono più interessato a trovare la soluzione 'desiderata'. Tutto quello che voglio fare è cancellare un record dalla tabella Figlio. Qualcuno può aiutare?

Questo è un completo e semplice esempio. I SaveChanges() tiri la seguente eccezione:

"Operazione non riuscita:. Il rapporto non potrebbe essere cambiato perché uno o più delle proprietà chiave esterna è non annullabile Quando viene apportata una modifica ad un rapporto, la proprietà della chiave esterna relativa è impostata su un valore nullo.Se la chiave esterna non supporta i valori nulli, è necessario definire una nuova relazione, la proprietà chiave esterna deve essere assegnata a un altro valore non nullo oppure l'oggetto non correlato deve essere cancellato. "

Il codice simile a questo:

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 
      } 
     } 
    } 
} 

Database si presenta come segue:

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) 

C'è un record nella tabella padre (Id = 1) e ci sono 2 record nella Tabella figlio (Id 1 e 2). Entrambi i record figlio hanno un ParentId = 1.

+0

Dovresti includere più tag nella tua domanda, come 'C#', tag 'VS2012' ecc. Otterrai più visualizzazioni e risposte in questo modo. – Komengem

risposta

7

Se tutto ciò che si desidera è eliminare l'oggetto figlio, l'oggetto padre non dovrebbe essere interessato nella logica. Prova il codice qui sotto, fammi sapere cosa succede (non testato).

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, il codice ha funzionato. Il mio progetto principale (nessun accesso ad esso al momento) è probabilmente un po 'più complicato di questo esempio, ma sono sicuro che posso regolarlo per funzionare in modo simile. Grazie per la tua rapida risposta. –

Problemi correlati