2015-06-24 23 views
10

Ho molte tabelle con la stessa struttura del modello ma con altri nomi di tabelle con altri dati (in questo caso saranno ~ 100 tabelle). Voglio cambiare dinamicamente il nome della tabella in runtime usando Entity Framework (per esempio ottenere la tabella dei nomi dal routing). Le tabelle nel database vengono aggiunte e eliminate in modo dinamico da altri script. C'è un modo per farlo con una buona prestazione come questa?Nome tabella dinamico con framework entità

db.Table("TableName")<SpecificModel>.Where(x => x.ID == ID) 
+2

Non posso fare a meno di chiedermi perché non si normalizzano i tavoli in un solo tavolo? Se sono tutti della stessa struttura ... –

+0

Il modo più semplice è normalizzare ma non posso farlo in questo progetto. Le tabelle devono essere separate – Obin

+0

Per fare ciò che si vuole fare è necessario aggiornare il file edmx con i nuovi metadati delle tabelle create. Non conosco un modo per farlo in fase di esecuzione, perché l'aggiornamento del file edmx richiederebbe una ricostruzione perché sarebbe generato un nuovo codice. Penso che Entity Framework al momento non supporti ciò che stai cercando di fare. – tdbeckett

risposta

5

Vuoi fare così?

foreach (string tableName in new[] { "Table1", "Table2" }) 
{ 
    var result = dbContext.Database.SqlQuery<SpecificModel>(string.Format("SELECT * FROM {0} WHERE [email protected]", tableName), 1).FirstOrDefault(); 
} 
+0

Funziona bene ma è ancora una query. C'è un modo per farlo con LINQ? – Obin

+0

Sì, penso che possiamo farlo in LINQ usando Reflection ed Expression, ma non mi sembra complicato una volta che ti faccio sapere. Nell'entità framework, infine l'espressione linq verrà convertita in query sql, quindi non c'è più differenza con quello. Utilizzando questo metodo anche EF mappando i dati in oggetto classe (SecificModel) a destra :) –

+0

Ciò consentirà l'iniezione sql. – tdbeckett

Problemi correlati