Zoals ik al in mijn vorige forum post had aangegeven, ben ik me aan het verdiepen in het MVC2 framework van ASP.net. Ik heb inmiddels een dataconnectie gelegd tussen de database en de applicatie. Ik heb een overview van de data gemaakt en een detail view.
Momenteel ligt mijn focus op het schrijven van de "add" en "edit" action. Ik vind dit tamelijk lastig. Ik heb er al een tutorial over gelezen, maar het wil me gewoon niet echt lukken. Overigens ben ik een beginner met LinQ to SQL.
Is er misschien een gevorderde ASP.net/MVC programmeur op dit forum, die mij dit zou kunnen/willen uitleggen??
Ik snap voornamelijk de manier van het gebruik van models en LinQ to SQL niet goed. Ik bedoel hiermee niet dat ik de werking niet begrijp of de functie van een model. Meer de manier van hoe ik deze benader en gebruik. Evenzo LinQ to SQL. Ik vind het maar een vaag taaltje. Ik heb toch niet voor niks SQL geleerd??
LinQ staat voor Language Integrated Query. Het komt erop neer dat instructies zoals de gebruikelijke SQL-instructies nu in C# verweven zitten. Ze zijn toepasbaar op arrays, lijsten, xml en ook op databases natuurlijk. SQL heb je niet voor niets geleerd want de normale vorm van LinQ is niet zo héél verschillend van de standaard instructies:
String naam = db.Leden.Single(l.Id.Equals(1)).Naam;
String naam = db.Leden.Single(l.Id.Equals(1)).Naam;
Dergelijke functies verwachten soms als parameter een predicate. Dit is een functie om te zien of een element aan de opgegeven voldoet. In bovenstaand geval moet het Id van een lid gelijk zijn aan 1. Je zou ook First() kunnen gebruiken. Die geeft het eerst gevonden element terug. Bij Single() wordt er verwacht dat er maar 1 resultaat zal gevonden worden, bij meerdere gevonden zal er een Exception gegooid worden. Zover de LinQ!
Wat snap je niet aan het concept van de benadering van een Model? Je maakt een Controller en een gepaste View. In de controller zorg je voor de juiste methodes en that's it eigenlijk.
Voornamelijk het opslaan, bewerken en verwijderen van gegevens uit de database. Ik denk dat het gemakkelijker is als ik je gewoon mijn code geef, waarschijnlijk geeft dat meer inzicht.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace cms.Models
{
public class PageModel
{
cms_LINQDataContext db = new cms_LINQDataContext();
public IQueryable<page> getAllPages()
{
return db.pages;
}
public page getPage(int id)
{
return db.pages.SingleOrDefault(d => d.pid == id);
}
}
}
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Web;
namespace cms.Models
{
publicclass PageModel
{
cms_LINQDataContext db =new cms_LINQDataContext();
Ik heb die tutorial die je in het begin aangaf eens gelezen en alles staat daar toch duidelijk uitgelegd? De Controllers die moeten aangemaakt worden en de Views die daaraan gelinkt worden. Heel het systeem van de DB en de edmx-file. Noem maar op, alles staat er heel uitgebreid in uitgelegd.
Je geeft nu je code die je hebt, wat is er dat er nog moet veranderen dat je niet snapt? Als je heel de tutorial volgt (je hoeft hem niet na te maken maar practice makes perfect) dan wordt de kracht van MVC wel duidelijk!
UpdateModel() is een methode die in je edmx-file zit om een object te wijzigen in de database. Als eerste parameter geef je je album-object mee en de tweede parameter is een prefix voor de valueprovider. Dan de SaveChanges(), deze voert de gewijzigde gegevens effectief door naar de database.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace cms.Models
{
public class PageModel
{
public cms_LINQDataContext db = new cms_LINQDataContext();
public IQueryable<page> getAllPages()
{
return db.pages;
}
public page getPage(int id)
{
return db.pages.SingleOrDefault(d => d.pid == id);
}
public page editPage(int id)
{
return db.pages.Single(d => d.pid == id);
}
internal void SaveChanges()
{
throw new NotImplementedException();
}
}
}
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Web;
namespace cms.Models
{
publicclass PageModel
{
public cms_LINQDataContext db =new cms_LINQDataContext();
Jouw code ziet er niet hetzelfde uit als in die tutorial. Probeer eens te debuggen met breakpoints. Zo kan je zien wat er allemaal wel uitgevoerd wordt.