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.@ {. 02db 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.Name10.}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.PriceE 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