För att kunna hänga med i denna artikel krävs det att du har minst Visual Studio Web Developer Express och ASP.NET MVC installerat samt tillgång till en MySQL-databas. Du behöver också ha laddat hem DbLinq.
Då jag varit lite nyfiken på ASP.NET MVC och Linq 2 SQL men ville använda MySQL istället för MSSQL så Google jag lite på ämnet och hittade denna sida http://www.primaryobjects.com/CMS/Article100.aspx som visar hur man kan använda DbLinq för detta.
I blogg-posten kommer jag att skapa en väldigt simpel blogg/gästbok för att visa hur detta går till att använda.
Börja med att skapa en ASP.NET MVC Web Application, företrädesvis med C# som programmeringsspråk då det är vad jag kommer att använda.
Skapa sedan en MySQL-databas och i denna databas skapar du en tabell vid namn blogg_post. Denna tabell ska se ut på följande sätt
| Fältnamn | Typ | Övrigt |
| id | INTEGER | Primary Key |
| posttitle | VARCHAR(100) | |
| postbody | TEXT | |
| dateposted | DATETIME | |
När detta är klart så laddar du hem DbLinq som du hittar här
Ladda hem den senaste versionen och packa upp filerna på lämpligt ställe. Öppna sedan kommandoprompten och navigera till bin-mappen i mappen som du packade upp filerna till. Det vi sedan ska göra är att generera en klass automatiskt baserad på vår tabell i databasen. Detta gör du genom att skriva
dbmetal /server:1.2.3.4 /user:dbuser /password:password /provider:MySql /database:databasename /language:C#
Givetvis måste du ändra till dina uppgifter för databasen. När verktyget har arbetat klart så ska du ha en klassfil i denna mapp som är döpt efter din databas. Importera denna fil i ditt projekt genom att i VS högerklicka på projektnamnet, välja Add –> Existing Item och leta reda på mappen där du hade verktyget (samma som du navigerade till i kommandoprompten).
Som vanligt krävs det lite extra krångel innan allt fungerar, men annars vore det väl inge kul :) Börja med att lägga till ett par referenser till MySQL-connectorn och DbLinq i ditt projekt. Detta gör du genom att högerklicka på projektet i VS och välja “Add reference”. Välj sedan fliken “Browse” och leta reda på build-mappen där du packade upp DbLinq. Lägg sedan till filerna DbLinq, DbLinq.MySql samt MySql.Data. Under fliken .NET skall du även lägga till referenser till System.Data.Linq.
Öppna sedan din skapade klass och ta bort samtliga using som förekommer efter using System.Text; och ersätt istället med följande
using DbLinq.Data.Linq;
using DbLinq.Data.Linq.Mapping;
using System.Configuration;
using MySql.Data.MySqlClient;
Sedan ändrar du så att klassen ärver från MySQLDataContext istället för DbLinq.Data.Linq.DataContext så din klass-deklaration ser ut så här
public partial class BlogDataContext : DbLinq.MySql.MySqlDataContext
Ditt klassnamn kommer att se annorlunda ut, vill du att detta ska heta nåt annat kan du givetvis ändra. Ta sedan bort de två konstruktorna som har skapats och ersätt med denna
public BlogDataContext()
: base(
new MySqlConnection(ConfigurationManager.ConnectionStrings["blogg"].ConnectionString)
) {}
Som du ser talar vi om att vi vill använda en Connectionstring vid namn blogg, vilket även innebär att vi måste lägga till denna i web.config. Öppna därför web.config och leta reda på taggen connectionstrings. I denna lägger vi sedan till vår egna
<add name="blogg"
connectionString="Server=1.2.3.4;User=dbuser;Password=password;database=databasename"/>
Fyll som alltid i dina egna värden.
Nu när vi gjort allt detta ska vi se till så att vi kan läsa från och skriva till vår blogg också. Eftersom VS skapade en massa filer åt oss när vi skapade projektet rensar vi nu upp lite. Ta bort allt i mappen Controllers, Views utom mappen Shared men töm även denna så att vi kan börja från scratch. Skapa sedan en ny controller genom att högerklicka på Controllersmappen –> Add –> Controller. Välj sedan att controllern ska heta DefaultController. Klicka även i checkboxen och tryck sedan på Add. Öppna sedan din nyskapade kontroller och i metoden som heter Index så skriver du in följande kod
// Detta bryter garanterat mot god MVC-sed men vi fångar upp datan här
// och skickar den till vår vy. Observera att BlogDataContext är namnet på min klass
// som DbLinq skapade åt mig.
using (BlogDataContext context = new BlogDataContext())
{
// Hämta ut alla poster och sortera på DatePosted
var posts = from p in context.BLogGPost
orderby p.DatePosted descending
select p;
// Returnera vyn och skicka med posterna
return View(posts);
}
Högerklicka sedan på Index och välj Add View. Låt “View name” vara men klicka i “Create a strongly-typed view och välj din klass som heter något liknande som din tabell i databasen gjorde. Hittar du den inte så kan du pröva att köra en “Build” på projektet. Under “View content” ska du välja “List” då vi vill lista alla inlägg på förstasidan. Nu är det bara en sak kvar som vi behöver göra innan vi kan köra projektet för första gången, och det är att ändra i global.asax så standard-routen har controller=”Default” istället för controller=”Home”.
Detta var väl kanske inte allt för spännande tycker du att se en nästan blank sida, men det beror på att vi ännu inte har några inlägg i vår blogg. Gå tillbaka till din default-controller. Som du ser så finns det två stycken create-metoder. Den första returnerar bara vyn, och den understa som har attributet
[AcceptVerbs(HttpVerbs.Post)] anropas när det är en Post som sker. Gå in i denna Create-metod och skriv in följande kod.
using (BlogDataContext context = new BlogDataContext())
{
// Skapa ett BlogGPost-objekt
BLogGPost post = new BLogGPost();
// Sedan fyller vi det med data från vår FormCollection
post.PostTitle = collection["PostTitle"];
post.PostBody = collection["PostBody"];
post.DatePosted = DateTime.Now;
// Lägg till det i databasen när det sker en submit
context.BLogGPost.InsertOnSubmit(post);
// Skicka ändringarna till databasen
context.SubmitChanges();
// Gå till vyn Index
return RedirectToAction("Index");
}
Högerklicka sedan på Create och välj “Add View”. Även denna ska vara strongly-typed till samma typ som innan men under “View content” så väljer vi istället “Create”.
I vyn som sedan skapas så börjar vi med att ta bort DatePosted och ID. Ändra sedan så att PostBody istället anropar Html.TextArea så att det ser ut som nedan.
<p>
<label for="PostBody">PostBody:</label>
<%= Html.TextArea("PostBody") %>
<%= Html.ValidationMessage("PostBody", "*") %>
</p>
<p>
<label for="PostTitle">PostTitle:</label>
<%= Html.TextBox("PostTitle") %>
<%= Html.ValidationMessage("PostTitle", "*") %>
</p>
<p>
<input type="submit" value="Create" />
</p>
Tryck sedan på F5 för att köra projektet och hejsan hoppsan så hade vi en blogg/gästbok som vi både kan skriva ut inläggen i och posta inlägg. För att posta inlägg går du till /default/create
Som en liten egen övning kan du snygga till det hela lite i Index.aspx och Create.aspx.
Hoppas du fått ut någonting av denna artikel.