Jag har labbat lite med Linq i ett projekt. Vet inte riktigt ännu vad jag tycker om det. Svårt att skapa sig en uppfattning förens man behärskar det.
Jag tycker att det verkar suveränt i vissa lägen när man snabbt behöver få ut information till något som man kanske inte kommer att behöva någon annan stans. men när det gäller vanligt förekommande sökningar som att t.ex. ta ut en användare så har jag hellre färdiga metoder. Iof skulle man kanske kunna ha en metodklass för det?
Ändringar i databasen verkar dessutom ställa till en del problem.
Länkningstaballer där primary key består av två kolumner verkar heller inte kunna hanteras automatiskt. Av länkningstabellen vill man kanske inte heller ha en klass.
Jag tycker LINQ-SQL funkar kanon. Kör med designern och bara drar in tabellerna, hur smidigt som helst. Många till Många relationer funkar bra för mig, så tabeller med flera kolumner som primärnyckel fungerar bra. T.ex koden nedan:
[Column(Storage="_SystemID", DbType="Int NOT NULL", IsPrimaryKey=true)]
public int SystemID
{
get
{
...
}
set
...
}
}
[Column(Storage="_UserID", DbType="Int NOT NULL", IsPrimaryKey=true)]
public int UserID
{
get
{
...
}
set
{
...
}
}
Bra sql-kod tycker jag också att den genererar, i de enkla fall jag testat, man får väl passa sig vid en del foreach-loopar så att man inte ansluter till databasen vid varje loop bara. Klassen DataContext kan du ju implementera partiellt så säg att du vill ha en funktion GetUsers() som du använder ofta så är det rätt smidigt att ha den direkt i DataContext.
public partial class UserDataContext
{
public List<Users> GetAllUsers()
{
var query = from s in Users
select s;
return query.ToList();
}
}
Jag tycker att själva LINQ implementation är helt okej, det är enkelt att förstå och göra frågor mot collectioner. Däremot så tycker jag LINQ to SQL är ett hafsverk och fortsätter på MS "klicka-gissa-spring" variant.
EntityFramework är däremot ett bättre alternativ, även om MS verkar ha fruktansvärt svårt att förstå att man oftast inte utgår ifrån en databas-modell när man designar sina system. När EF kommit så långt att jag kan ta mina färdiga entiteter i mitt eget assembly och mappa ihop dem med en databas, då är jag lycklig och kan gå över till den världen helt och hållet. Fram till dess så kör jag med egen OR-Mapper och skriver egen SQL-kod....