Borta på aspsidan.se tjatar Mikael Söderström (Vimpyboy) hål i huvudet på alla folk med sitt “Gå över till ASP.NET”-tjat, nu har det även gått över till “Kör du ASP.NET WEB FORMS? Kör MVC istället” (okej inte riktigt så men det kommer)
Jag beundrar Mikaels ork och jag skulle själv vilja orka tjata på folk sådär. Men han har i alla fall fått mig att både gå till ASP.NET och nu även MVC, jag har precis börjat och det finns fortfarande en hel del frågor. Nästan alla tutorials, screencasts och artiklar handlar om MVC och MSSQL / SQLEXPRESS av förklarliga skäl, i stort sett alla använder också LINQ TO SQL och där kom mitt problem, jag kör till största delen MySql och det fungerar sådär med det sistnämda.
Vimpy gav mig nåt kort svar som följer här: “Antingen fixar du ett plugin till EF så att du kan köra MySQL, eller så kör du med en annan OR Mapper (t.ex. nHibernate), eller så skapar du bara egna klasser.”
Detta var nästan rena grekiskan för mig, jag hade fötterna i djupa gropar istället för startgropar. Men jag satte mig och började googla lite, och nu har jag löst det. har ingen aning om det är det bästa sättet eller ens ett bra sätt. men jag tänkte i alla fall beskriva hur jag gjorde och sen kan vi tillsammans gå vidare och göra det bättre/rätt.
För att kunna följa denna så förutsätter jag att ni vet hur man skapar en MySql databas, har MCV installerat och vet hur man skapar ett ASP.NET MVC projekt och har grundläggande förståelse om detta, jag kommer inte förklara MVC då jag knappt förstår det själv riktigt
1 skapa databasen.
Vi ska börja med att skapa databasen, en väldigt enkel databas med endast en tabell.
Databasnamn: MVCTest
Tabell: Products
Kolumner: ID int Auto Inc, Title varchar(50), Description varchar(200)
CREATE TABLE `mvctest`.`Products` (
`ID` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`Title` VARCHAR(50) NOT NULL,
`Description` VARCHAR(200) NOT NULL,
PRIMARY KEY (`ID`)
)
ENGINE = InnoDB;
Släng in några dummyrader i databasen så vi har något att hämta ut senare.
2 ladda ner DbLinq.
Ladda ner DbLinq (jag använder DbLinq-0.18.zip) spara filen på lämpligt ställe och packa upp innehållet.
Dra igång kommandotolken (Start > Kör > cmd) och kör DbMetal.exe /conn:server=localhost;Port=3306;Database=mvctest;Uid=username;Pwd=password /provider: MySql /language:C#
Du måste såklart byta ut uppgifterna i connectionsträngen till de du använder.
Det som händer nu är att DbLinq loggar in och kollar igenom hur databasen du angav ser ut och skapar klasser i det programmeringsspråk du angav i “/language:”.
När filen är skapad så är det bara att hoppa vidare till steg 3!
3 skapa ett MVC projekt.
Öppna VS 2008, File > New Project > Visual C# > Web > ASP.NET MVC Web Application, ge den namnet MySqlMVC, jag väljer att skapa Unit Tests du kan ju välja själv
När projektet är skapat så måste vi börja med att lägga till lite referenser, högerklicka på References i Solution Explorer och välj Add Reference… klicka på fliken Browse bläddra fram till DbLinq mappen du packade upp i steg 2 och leta dig fram till mappen build, lägg till DbLinq.dll, DbLinqMySql.dll och MySql.Data.dll (antingen använder du denna eller så använder du den senaste från myslq.com)
Vi fortsätter lägga till referenser men denna gång under fliken .NET leta på System.Data.Linq och lägg till även denna, så nu är vi klara med det.
Högerklicka på mappen Models och välj Add Existing Item, leta på filen som skapades i steg 2 mvctest.cs (ligger i build mappen) och lägg till den. Här måste vi göra lite ändringar och tillägg för att det ska fungera.
Följande rader:
using DbLinq.Data.Linq;
using DbLinq.Linq;
using DbLinq.Linq.Mapping;
Ska bytas mot:
using DbLinq.Data.Linq;
using DbLinq.Data.Linq.Mapping;
using System.Configuration;
using MySql.Data.MySqlClient;
Vi tar bort using DbLinq.Linq; och ändrar de två andra så de innehåller .Data.Linq; sen lägger vi även till System.Configuration; och Mysql.Data.MySqlClient;
Leta sedan på följande rad:
public partial class MVCtEst : DbLinq.Data.Linq.DataContext
och byt den mot:
public partial class MVCtEst : DbLinq.MySql.MySqlDataContext
detta gör att klassen ärver från MySqlDataContext, såklart för att vi kör mot MySql.
Ta sedan bort de “konstruktorer” som skapas:
public MVCtEst(System.Data.IDbConnection connection)
: base(connection, new DbLinq.MySql.MySqlVendor())
{
}
public MVCtEst(System.Data.IDbConnection connection, DbLinq.Vendor.IVendor vendor)
: base(connection, vendor)
{
}
och lägg till denna istället:
public MVCtEst()
:base(new MySqlConnection( ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString))
{
}
Öppna web.config filen i ditt projekt, och där lägger du till din connectionstring:
<connectionstrings>
<clear/>
<add providerName=”MySqlProvider” name=”ConnStr” connectionString=”Server=localhost;Database=mvctest;Uid=username;Pwd=password”/>
</connectionstrings>
Så du var det klart att köra vidare till steg 4!
4 skapa Repository Class.
Det här kommer jag inte förklara nåt av, men anledningen till att man använder “Repository Pattern” är för att man ska kunna köra tester (Unit Tests) och för skalbarheten för framtiden.
Anledningen till att jag inte förklarar den grundligt att är att jag inte vet riktigt hur jag ska förklara det, men jag har använt följande källor för att få fram resultatet NerdDinner och Stephen Walthers video.
Högerklicka på Models katalogen och välj Add > Class, ge den namnet ProductsRepository.cs.
Koden:
private mvctestDataContext db = new mvctestDataContext();
public IQueryable<Products> GetAllProducts()
{
return db.Products;
}
Thats it.
5 skapa ProductsController och View.
För att kunna visa datan så måste vi ha en kontroller som returerar en View.
Börja med att lägga till using MySqlMVC.models;
Koden:
ProductsRepository pRepository = new ProductsRepository();
public ActionResult Index()
{
var products = pRepository.GetAllProducts().ToList();
return View(“Index”, products);
}
En lathund för att få fram en View som visar datan lite snabbt är att ställa dig efter ; (semikolonet) på raden return View(“Index”, products); och högerklicka > Add view… kryssa i strongly-typed view och i View data class: väljer du Products och i View Content: väljer du List, låt namet vara Index.
VS skapar då automagiskt en view som skriver ut datan.
6 Kör projektet.
Nu kan du trycka på f5 och köra ditt projekt, surfa sedan till /Projekts.
Nej men se på fan, där visas den dummydata du skrev in i databasen i punkt 1.
Kör gärna på i kommentarerna för att utveckla detta, var så säker att jag kommer fortsätta, detta helt ny intressant jaktmark för mig and i like it!
