Jag håller på att leta efter en o/r-mapper. Antingen en opensource eller så kommer jag att köpa en. Tänkte höra vad man ni anser man skall ställa för krav på en sådan.
Efter att ha kika igenom ett antal mappers så har jag fått en liten bild av vad man bör ställa för krav.
Stabilt
Vara flexibelt, skall kunna köra egna sql frågor genom det, och få ut tex. ett dataset.
Lazyload.
Ange vad som skall laddas och vad som inte skall laddas, även i runtime.
Stödja m:m relationer, och alla andra typer av relationer.
Ha olika typer av idnummer. String, int, guid osv.
Ha ett flexibelt frågegränssnitt.
Stödja transactions, så att man kan rulla tillbaka när det blir fel.
Stödja access, mysql, sql server, oracle.
Hög säkerhet för mappningen, jag skall kunna dölja mappningen om jag önskar detta.
Stödja databindings. (?)
Använda någon form av datacache för att snabba upp när jag laddar samma objekt flera gånger.
Uppdatera bara det som är förändrat.
Ha ett konsekvent API, inga fulhack för vissa lösningar såsom m:m
Om ni ser något som saknas så skriv en post om vad ni ställer för krav på det.
Tänkte också passa på och fråga om det finns något intresse här på webforum att skapa ett projekt där man tillsammans bygger en o/r-mapper. Det finns en hel del vettiga opensource objekt som man skulle hoppa på.
Jag har gjort ett lite ramverk men jag känner att jag inte har tid att bygga klart detta, det är därför som jag funderar på att köpa något färdigt att använda.
Någon som är sugen på att starta ett litet projekt?
Har suttit de senaste två månaderna och skapat en liten primitiv o/r mapper. Anledningarna till att jag inte köper en är att jag kommer att behöva väldigt speciell funktionalitet i framtiden, att den kommer att ingå i en kommersiell produkt som jag helst undviker 3-e parts programvaror i samt att jag är lite dum i huvudet!
Jag har testat ett flertal kommersiella och open source produkter. De kommersiella är ju inte direkt dyra så egentligen så finns det inget som motiverar utvecklingstiden det tar att göra något eget. Dessutom är det nog det svåraste jag har gett mig in på att skapa.
Man får absolut inte glömma bort den erfarenhet och kompetens som det ger att skapa en O/R Mapper.
Har dock svårt att tänka mig att du kan ha så speciella krav på din O/R Mapper som iprincip endast skall fixa objekt från en databas och sedan spara ner datan igen.
Speciella funktioner skall nog inte ligga i din O/R Mapper utan i något FrameWork som du bygger.
För övrigt så stödjer mitt DAL OLEDB, ODBC och SQL Server. Vilket gör att mitt DAL kan hämta data från alla databaser som har en ODBC/OLEDB drivrutin. Sedan borde man kanske använda Oracles speciella drivrutin, men har aldrig haft behovet alltså är det inte implementerat :)
Du har rätt Gladh. Och det jag bygger är ett framework, inte en o/r mapper. Jag skulle kunna byta ut den delen mot en kommersiell produkt men det känns fel.
Vad det gäller koppling mot mysql så är odbc inte riktigt något alternativ för mig pga slöheten :)
Jag har bara hunnit gå igenom 2 opensource på o/r-mappers på djupet.
Den första jag tittade på var OFP.net (https://www.littleguru.net). Denna verkar stödja alla databaser, nackdelen med det är man ändå får skriva sqlsatser, samt att jag inte tycker om att ha Load metoder i de egna klasserna. Varför vet jag inte riktigt... Men OFP.net verkar fungera fungera med de flesta databaser.
Det andra ramverket som jag både läst koden på och faktiskt använder till lite mindre projekt är Sisyphus. Denna skall fungera tillsammans med access, sql server och mysql. Jag vet inte om den fungerar till Oracle men det finns klasser för oracle men har inte testat det, men till mysql och access så fungerar det nästan smärtfritt.
Detta är den mapper som jag testat mest och trivs ganska bra med den. Dock är där lite buggar som man får se upp med, men det hela är så pass enkelt uppbyggt så att det inte är några större problem att hitta var det är fel. Dock så är det någon obskyr blandning av att ha load metoder i klasserna och att användande av en broker. Detta är den mappern som jag skulle tänkta mig att jobba vidare med och bygga på. Uppbyggnaden av den är relativt lätt att förstå och det går relativt snabbt att komma igång med den.
Sen har jag testat OJB.net , men fick aldrig det att fungera med någon reda, det verkar dock vara ett väldigt komplett ramverk och kan säkert bli bra. Det verkar vara den mest genomarbetade och seriösa opensource mappern som jag hittat till .net.
Det är just det som du säger, Jon, att du vill ha en speciell funktion i din mapper som gör att man vill bygga sin egen. De kommersiella huvudalternativen, llblgen pro och entitybroker som jag tittat på verkar inte stödja att spara binära filer till exempel. Det känns riktigt surt att pga detta att förstöra arkitekturen för att få lösa detta specifika problem.
Jag tycker det är ruggigt skoj att mecka med o/r-mapper för där är tonvis med roliga problem att lösa, dock så känner jag att jag har för lite erfarenhet och i synnerhet för lite tid.. så är där någon som är sugen på att bygga ett ramverk eller fortsätta bygga på sisyphus, och som vill ha någon att bolla ideér med så är jag intresserad..
Vill du bara bolla ideér så ställer jag upp. Har även jag börjat med en O/R mapper, även om den inte är speciellt komplett. Kan iprincip endast hämta och spara object till/från databasen.
Bygger på funktionalliteten efterhand som den dyker upp. Har även byggt ett cachingobjekt som fick mycket "inspiration" från MS Caching Block. Har dock inte implementerat det än.
Tyvärr har jag inte tid att hjälpa till med ett så stort projekt som en O/R mapper kan bli, eftersom jag har fullt sjå med egna så projket, just nu tänker jag konkurerar ut BizTalk :)
Ligger i ungefär samma läge som Gladh.
Man kan hämta/spara/uppdatera/radera objekt.
Man kan även köra ful-sql rätt in i DAL:et (lär snuskigt på nåt datanördvis)
Sen har jag ett enklare Criteria-object som låter mig gör jämförelser.
Det är som sagt en del av ett större ramverk med en mycket speciell och självklart tillsvidare superhemligt syfte.
Nästa stora sak jag måste göra med o/r mappingen är att bryta ut min o/r-mapping från mitt DAL. det sitter ihop lite väl mycket just nu.
Cachningen kommer senare. Måste läsa in mig lite på den biten och den räcker det med att cachea på klienten tills projektet växer
Nu till jul tänkte jag beställa lite böcker.. Någon som vet om det finns några böcker som behandlar o/r-mappers. Iofs så kan man ladda ner hibernates kod å läsa den men.. :h
Nu till jul tänkte jag beställa lite böcker.. Någon som vet om det finns några böcker som behandlar o/r-mappers. Iofs så kan man ladda ner hibernates kod å läsa den men.. :h
* In the documentation aof any O/R mapper that is available , out of which some are even for the .NET Framework, like our EntityBroker (http://www.thona-consulting.com/)
Givetviss var det Thona från thona-consulting som föreslog länkarna var vid den sista givetviss följde med :)
Ja. synd att en kille med sådan kunskap är så dålig på att förmedla den. Lite väl otrevlig ibland och rackar ner på frågor och idéer som inte passar men innehåller som sagt en hel del kunskap verkar det som.
Men det är klart - han vill väl värna om sin produkt :)
Är det någon som har gjort en vettig cache förresten?
Sitter och klurar lite. Har tittat lite på dirty bits och så men får inget bra helhetsgrepp om hur jag ska angripa problemet...
Ja thona kan vara riktigt otrevlig ibland. Första gången jag läste hans inlägg, tror det vara på ms newsgroups, så höll jag på att tappa hakan.. ruggigt otrevlig och allting som inte finns i entitybroker är inte värt att ha med i en o/r-mapper.. (nästan)
strunt samma..
Ang cache.. Har inte hittat så mycket info om det, skall försöka leka med det i jul tänkte jag. OJB.net använder sig av den webbcachen som finns i System.Web.Caching. Denna tänkte jag försöka leka lite med. Har aldrig sysslat med den så vet inte hur den fungerar.
Denna länken har jag samlat på mig, dock så handlar den om att man inte skall använda en cache, men där kanske står lite matnyttigt.
Att använda System.Web.Caching är ingen bra idé. Den utgår ju ifrån att du alltid har en IIS installerad. Och då fallerar det ju om du skapar en vanlig Application.
En cache är inget mystiskt. Den enklaste cachen är en Hashtable som man lägger objekteten i. Då kan man enkelt kolla i Hashtablen om objektet finns så fall använda det, finns det inte så hämtar man det från databasen och sedan lägger man det i cachen.
Nu kanske man vill kunna göra mer saker, som att bestämma att ett objekt skall dö efter en vistid, eller ett bestämt klockslag. Eller kanske vid ett speciellt event.
Enklaste sättet att lösa problemet på är att man skapar ett speciellt "cacheObjekt" som tar dels objektet som man vill cacha och sedan ett klockslag när objektet inte skall gälla längre.
Så när man sedan hämtar objektet så kollar man om det är giltigt (kollar om tiden är mindre än klockslaget) är det ok, så använder man objektet, annars så slänger man det och hämtar ett nytt från databasen.
Detta kan givetviss förbättres med att man har en egen tråd som ligger och kollar typ varje sekund om ett objekt är förgammalt och så fall tar bort det från cachen. Osv osv...
Men återigen kolla på MS Cache, den har riktigt bra lösningar, ser dock lite svårt och skrämmande ut förstgången man tittar på den. Men tar man det bara succesivt så går det bra.
Om man har en hashtable med sina objekt i en asp.net applikation så måste ju även den sparas i cachen på något sätt för att leva kvar. Blir inte det lite konstigt?
Om man har en hashtable med sina objekt i en asp.net applikation så måste ju även den sparas i cachen på något sätt för att leva kvar. Blir inte det lite konstigt?
Det beror på hur du skriver den, om du gör din hashtable static så behöver du inte lägga den i någon cache, eftersom ett statiskt objekt är samma för alla användare, och så länge någon användare referera till din cache så finns den kvar i minnet.
Ms data cache verkar jekligt nice.. Laddade ner den å sitter å läser lite kod.. Sprang på en annan datacache som jag hittade på en blog.. Har inte testat och vet inte hur bra den är men tänkte dela med mig av den.. Filen som är bifogad är källkoden..
Hmm.. Finns det inget ställe där man kunde samla alla kodsnuttar man hittar och känner för att dela med sig av.. Känns lite surt att sno plats av webbforum bara för detta..