Bene, abbiamo potuto trascorrere un paio d'ore la scrittura di un tradizionale della vecchia scuola strato di accesso ai dati, utilizzando le classi per rappresentare il nostro modello di dominio e metodi per eseguire query e persistere al database, ecc, ecc .... ma questo è il modo in cui il papà lo ha fatto!WebMatrix dovrebbe essere tutto fresco, dinamico, groovyness scripting veloce - così lascia farlo nel modo dinamico ...
Il programma di installazione
Prima di tutto, permette di creare un database SQL Server Compact nel nostro progetto WebMatrix denominato "Catalogo" e dargli una tabella chiamata "Prodotti" (originale eh?):
E noi aggiungeremo alcuni record:
E questo è tutto, siamo tutti insieme.
Il "5 Minuti Demo" via
Dopo la forma del codice demo al solito facciamo qualcosa del genere per visualizzare un elenco di nomi di prodotto:
01.
@ {
. 02
db var = Database.Open (
"Catalogo"
);
03.
var sql =
"SELECT * FROM prodotti"
;
04.
var qry = db.Query (sql);
05.
}
06.
07.
08.
@
foreach
(var prodotto
in
qry) {
09.
@ product.Name
10.
}
11.
Allora qual è il problema? Beh, se questa era una pagina di un sito, allora non sarebbe davvero un problema a tutti. Il problema nasce quando si desidera ottenere i dati in luoghi diversi su più pagine - si trasforma in un incubo di manutenzione. I gattini possono morire.
Immaginate di avere il codice di accesso dati in 20 luoghi diversi nel tuo sito (che è un numero realistico di un sito piuttosto piccolo) e di modificare il database o rinominare la tabella prodotti? Cosa succede nel caso di query prodotti su diverse pagine e le modifiche specifiche per includere una colonna 'inStock' ed è necessario modificare tutte le liste prodotto per mostrare solo gli elementi che hanno segnato questo campo come vero? Mi rendo conto che io sono probabilmente "predicare ai convertiti" qui, ma si ottiene il mio punto.
Ecco come i ragazzi lo stanno facendo raffreddare ....
Creiamo un nuovo file Razor nella nostra cartella App_Code (crearne uno se non esiste già) chiamato ProductsData.cshtml e aggiungere il codice seguente:
01.
@
utilizzando
System.Dynamic;
02.
03.
@ funzioni {
04.
05.
pubblici
statici
catalogo database {
06.
ottiene
{
07.
ritorno
Database.Open (
"Catalogo"
);
08.
}
09.
}
10.
11.
pubblici
statici
GetProducts IEnumerable () {
12.
var sql =
"SELECT * FROM prodotti"
;
13.
ritorno
Catalog.Query (sql);
14.
}
15.
}
Ora, se abbiamo bisogno di cambiare il nostro SQL lista dei prodotti abbiamo solo bisogno di farlo in un posto e rende il file di vista Razor molto più facile da leggere. Il GetProducts () restituisce IEnumerable
1.
<
ul
>
2.
@ foreach (var prodotto in ProductsData.GetProducts ()) {
3.
<
li
> @ product.Name
li
>
4.
}
5.
ul
>
Ora che è meglio! Che altro possiamo fare? Beh, potremmo aggiungere un metodo ProductsData.cshtml per tirare fuori un singolo prodotto, passando nel suo ID del prodotto:
1.
pubblici
statici
GetProductById dinamico (
int
id)
2.
{
3.
var sql =
"SELECT * FROM Prodotti WHERE ID = @ 0"
;
4.
restituire
Catalog.Query (sql, id) Singolo ().;
5.
}
Che possiamo usare in questo modo nella pagina di contenuto:
1.
@ {
2.
productId var = 1;
3.
prodotto var = ProductsData.GetProductById (ProductID);
4.
5.
}
6.
7.
@ product.Name - @ product.Price
E ancora, tutto il nostro codice di accesso ai dati è in un posto e le nostre pagine di contenuto sono molto più pulito.Abbiamo salvato molti cuccioli.
Inserti e aggiornamenti
Siamo in grado di ottenere gli stessi benefici con inserti e aggiornamenti con un po 'di magia Expando! Il metodo seguito in ProductsData.cshtml ci dà inserti:
1.
pubblici
static
void
AddProductO (prodotto dinamico) {
2.
var sql =
"INSERT INTO Prodotti (nome, descrizione, prezzo)"
+
3.
"VALUES (@ 0, @ 1, @ 2)"
;
4.
Catalog.Execute (sql, product.Name, product.Description, product.Price);
5.
}
Il metodo ha un parametro che accetta un dinamico. La suggestione delle dinamiche significa che possiamo passare un ExpandoObject, che avrà i suoi membri risolto a runtime. Usando la dinamica in questo modo il compilatore semplicemente non importa se si può risolvere product.Name, product.Price, ecc e lascia solo alla fase di esecuzione per risolvere.
A nostro parere siamo in grado di ottenere i dati di cui abbiamo bisogno da parte dell'utente in un "nuovo prodotto" forma e utilizzare il metodo AddProductO in questo modo:
01.
@
utilizzando
System.Dynamic;
02.
@ {
03.
se
(isPost) {
04.
05.
prodotto dinamico =
nuovo
ExpandoObject ();
06.
product.Name Richiesta = [
"Nome"
];
07.
product.Description = Request [
"Descrizione"
];
08.
product.Price = Request [
"Prezzo"
];
09.
10.
ProductsData.AddProduct (prodotto);
11.
}
12.
}
Qui dobbiamo solo creare un nuovo ExpandoObject, aggiungere membri ad esso a partire dai dati presentati modulo e passare al metodo AddProductO. Peasy facile.
Gli aggiornamenti sono realizzati in modo molto simile. Questo è il metodo SaveProduct:
1.
pubblici
static
void
SaveProduct (prodotto dinamico) {
2.
var sql =
"Prodotti UPDATE SET Nome = @ 0, Descrizione = @ 1, Prezzo = @ 2 where id = @ 3"
;
3.
Catalog.Execute (sql, product.Name, product.Description, product.Price, product.Id);
4.
}
E questo è il codice nella vista:
01.
@
utilizzando
System.Dynamic;
02.
@ {
03.
se
(isPost) {
04.
05.
elemento dinamico =
nuovo
ExpandoObject ();
06.
item.Id = Request [
"Id"
];
07.
item.Name = Request [
"Nome"
];
08.
item.Description = Request [
"Descrizione"
];
09.
item.Price = Request [
"Prezzo"
];
10.
11.
ProductsData.SaveProduct (voce);
12.
13.
Response.Redirect (
"~ / Index.cshtml"
);
14.
}
15.
}
Ancora una volta stiamo creando un nuovo ExpandoObject, aggiungere membri ad esso a partire dai dati presentati modulo e passando al metodo SaveProduct in ProductData.cshtml.
Riassunto
Ecco come possiamo usare la dinamica e Razor @ funzioni per creare un semplice strato di accesso ai dati per i siti WebMatrix nostro sito. Tutti i cuccioli salvati, il tempo di andare a letto.
Corso Visual Studio - Corsi Visual Studio
Corso .Net- Corso Dot.Net - Corso Vb.net
Corso C# - Corso PHP - Corso Joomla
Nessun commento:
Posta un commento