Per il mio stage sto creando un programma che comunica con un database sullo sfondo. Il programma è stratificato nel modo MVC (Model-View-Controller).Classe di query Linq2Sql orientata agli oggetti
Per la vista voglio accedere ai dati tramite qualcosa che ho chiamato DataAccesLayer (DAL). Perché quella vista ha una conoscenza minima, voglio che passi un ID per la query che voglio chiamare. La chiamata verrà eseguita all'interno del DAL. Quindi con l'ID voglio chiedere una classe che trattiene le query per restituire la query per poi eseguirla all'interno del DAL. Immagine per la visualizzazione.
Il problema che ho ora è come eseguire la query nella mia funzione Read. Il codice per DAL è il seguente:
public class DataAccesLayer
{
private Queries queryloader;
private RoadsoftDigitacV8DataContext db;
public DataAccesLayer()
{
queryloader = new Queries();
db = new RoadsoftDigitacV8DataContext();
}
public List Read(int ID)
{
IQueryable query;
query = queryloader.GetQuery(ID);
return query.ToList();
}
}
Il Codice per la classe Query:
public class Queries
{
private Dictionary<int, IQueryable object> queryDict;
private ErrorLoggerWinLog logger;
public Queries()
{
logger = ErrorLoggerWinLog.Instance();
queryDict = new Dictionary<int, IQueryable object>();
queryDict.Add(1, from d in db.Drivers
select d);
}
public object GetQuery(int ID)
{
var query;
if(queryDict.TryGetValue(ID, out query) == false)
{
logger.WriteLine("Queries", "Could not find the query specified", ErrorLoggerWinLog.loggerlevel.Error);
}
return query;
}
}
mi chiedo, è possibile? In questo momento non sembra funzionare. Probabilmente sto dimenticando qualcosa o mi manca qualcosa di importante. Qualcuno ha qualche esperienza con questo tipo di set-up, o dovrebbe guardare a una soluzione totalmente diversa?
Modifica: In questo momento non sembra eseguire la query, come se mi mancasse un comando nella funzione di lettura. Il Datacontext è riempito però, che viene fatto in una diversa sezione del programma.
Edit2: In questo momento sto esaminando il pattern IRepository, è una grande esperienza di apprendimento, grazie a tutti coloro che hanno preso tempo per commentare e anser!
Buona sforzo con la domanda, +1 per immagine =] – Sean
Tuttavia ..... Che cosa esattamente non funziona? – Sean
È ancora necessario connettere l'oggetto contesto db al database effettivo. Come lo hai ora, hai un contesto non connesso. Quindi avresti bisogno di eseguire effettivamente la query attraverso il contesto. – ThaMe90