Quando si aggiunge un controller per un modello, le azioni generate sarà simile a questapassano automaticamente Entity per azione controller
public ActionResult Edit(int id = 0)
{
Entity entity = db.Entities.Find(id);
if (entity == null)
{
return HttpNotFound();
}
return View(entity);
}
Ora, nel mio caso prendo un id stringa che può mappare a DB ID in diversi modi, producendo diverse linee di codice per il recupero dell'entità corretta. Copia & incollando quel codice per ogni azione che richiede un ID per recuperare un'entità si sente molto inelegante.
Mettere il codice di recupero in una funzione privata del regolatore riduce la quantità di codice duplicato ma io sono ancora a sinistra con questo:
var entity = GetEntityById(id);
if (entity == null)
return HttpNotFound();
C'è un modo per eseguire la ricerca in un attributo e passaggio l'entità all'azione? Venendo da python, questo potrebbe essere facilmente raggiunto con un decoratore. Sono riuscito a fare qualcosa di simile per i servizi WCF implementando uno IOperationBehavior
che ancora non si presenta come semplice. Dal momento che il recupero di un'entità dall'ID è qualcosa che devi fare spesso, mi aspetto che ci sia un modo diverso dal copiare il codice & che incolla.
ideale sarebbe simile a questa:
[EntityLookup(id => db.Entities.Find(id))]
public ActionResult Edit(Entity entity)
{
return View(entity);
}
dove EntityLookup
prende una funzione di mappatura arbitraria string id
-Entity
eo restituisce HttpNotFound
o chiama l'azione con l'entità recuperate come parametro.
Ha fatto si considera sulle espressioni lambda in LINQ ?, che cosa si può fare è, è possibile avere un livello di accesso ai dati separato, in cui è possibile scrivere le funzioni di recupero dei dati e chiamarli all'interno dei metodi di azione (separazione delle preoccupazioni). :), Se hai intenzione di fare metodi privati per ogni recupero, ci saranno molte linee di codici all'interno dei controller. –
1. È ancora possibile inserire la convalida direttamente in 'GetEntityById'. 2. Probabilmente stai cercando un raccoglitore di modelli personalizzato. –