2012-05-25 7 views
5

Ho una situazione in cui posso lavorare con più DbContexts che possono contenere o meno un DbSet di SomeEntity.Come verificare se DbContext.Set <T> esiste nel modello?

Naturalmente, se sparare SaveChanges e questa entità non è presente, si verifica il seguente errore: Tipo

L'entità SomeEntity non è parte del modello per i contesto.

Come è possibile verificare se l'entità o il set di entità esiste in un modello e cortocircuitare il bit di codice offendente se non lo è?

Richard

risposta

10

L'eccezione dovrebbe essere gettato immediatamente quando si chiama Set<NotMappedEntityType> quindi il modo più semplice è quello di catturare l'eccezione e gestirlo come avete bisogno.

La soluzione complessa richiede di esplorare i metadati di mappatura e cercare il tipo di entità mappata che deve avere lo stesso nome del tipo CLR. È possibile aggiungere questo metodo nella classe di contesto derivata per verificare l'esistenza del tipo di entità:

+1

Grazie. Ho usato il metodo fornito. Sono sempre a disagio nell'usare eccezioni in luoghi in cui so che c'è un'eccezione. Se questo ha un senso. – Richard

+0

È ancora vero, quattro anni dopo? O c'è qualche metodo integrato per controllarlo? –

-2

Ho spesso utilizzato dopo l'implementazione.

(ho dichiarato questo metodo in un'interfaccia separata che è in corso di attuazione da parte della classe contesto.)

public bool EntitySetExists<T>(T entity) where T : class 
{ 
    return this.Set<T>().Local.Any(e => e == entity); 
} 

Se nel caso si vede lamentarsi "Qualsiasi()" metodo di estensione semplicemente bastone in "using System.Linq;" se mancante.

+0

Per chiarire il mio downvote, questo risponde alla domanda sbagliata; la risposta accettata è corretta – AlexFoxGill

0

Questa è la mia risposta semplificata:

public partial class MyDbContext : DbContext 
{ 
    public bool Exists<Tx>() where Tx : class 
    { 
     var attachedEntity = this.ChangeTracker.Entries<Tx>().FirstOrDefault(); 
     return (attachedEntity != null); 
    } 
} 
Problemi correlati