2014-07-14 10 views
9

Ho una relazione 1..* tra X e Y, dove X è il genitore. Quando provo e Elimina record Y ricevo il seguente messaggio di eccezione:Le entità in "Y" partecipano alla relazione "FK_Y_X". Sono stati trovati 0 "X" correlati. 1 'X' è previsto

Enti a 'Y' partecipare al rapporto 'FK_Y_X'. Sono stati trovati 0 "X" correlati. 1 'X' è previsto.

Attualmente sto cercando di eliminare il record in maniera scollegata generica nel seguente modo:

public bool Delete(TEntity entity) 
{ 
    if (entity == null) 
    { 
     return false; 
    } 
    try 
    { 
     var entry = _context.Entry(entity); 
     entry.State = EntityState.Deleted; 
     _context.SaveChanges(); 
     return true; 
    } 
    catch 
    { 
     return false; 
    } 
} 

L'entità che viene passato in è caricato con AsNoTracking() sullo stesso contesto.

Qualche idea?

+0

possibile duplicato di [EntityState.Deleted non funziona, Remove (entity) fa?] (Http://stackoverflow.com/questions/16194162/entitystate-deleted-does-not-work-removeentity-does) - not uno esatto, ma forse spiega abbastanza bene il tuo problema – BartoszKP

+0

@BartoszKP L'entità 'Y' è un bambino e non ha altri figli. Chiamando 'Set () .Remove (entity)' risulta lo stesso una volta collegato. Per confermare, voglio solo cancellare il record 'Y', non mi interessa affatto 'X' quindi' X' non è stato caricato. –

+0

Hai il vincolo sul figlio invece che sul genitore? –

risposta

0

Forse si devono consentire i valori NULL sulla controllante (X) o rimuovere l'entità, se non si ha intenzione di usarlo più

4

tenta di aggiungere una proprietà pubblica yid a X, che si terrà il collegamento con Y, questo ha risolto il mio problema, io uso Breeze con EF6 e ho lo stesso errore.

Class Y 
{ 
    public int Id { get; set; } 
    public ICollection<X> Xs { get; set; } 
} 

Class X 
{ 
    public int Id { get; set; } 
    public int YId { get; set; } 
    public Y Y { get; set; } 
} 
4

Quando si context.Y.Attach(x); fare in modo che l'oggetto x tiene la "Id" per la controllante. Hai bisogno di entrambi.

Esempio:

x.Id = 3; 
x.ParentEntity.Id = 10; 

che ha risolto il mio problema, almeno. Ho dimenticato l'id del genitore nell'oggetto che ho allegato.

+0

se non ti dispiace, estendi questa risposta per spiegare che, in generale, questo problema si verifica quando il caricamento lazy è disabilitato e che dovresti chiamare 'context.y.Attach (x)' se non lo hai già fatto? Grazie per la tua risposta. –

Problemi correlati