webForumDet fria alternativet

Krav på o/r -mappers

.NET

19 svar · 564 visningar · startad av Walker

Medlem sedan okt. 2002188 inlägg
Frågan#1

Hej

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?

/w

Medlem sedan juli 20011 304 inlägg
#2

Det ser väl ut som ganska vettiga punkter.

Stödja databindings. (?)

Får vi verkligen hoppas att alla gör! :)

Stödja access, mysql, sql server, oracle.

Har du hittat någon som gör det?

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.

Medlem sedan maj 20012 812 inlägg
#3

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 :)

- M

Medlem sedan juli 20011 304 inlägg
#4

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 :)

Medlem sedan okt. 2002188 inlägg
#5

Hej

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..

:p

Medlem sedan maj 20012 812 inlägg
#6

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 :)

Men bolla ideér har man alltid tid med.

- M

Medlem sedan juli 20011 304 inlägg
#7

Jag är också gärna med och bollar ideér :)

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

Medlem sedan okt. 2002188 inlägg
#8

Skoj :)

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

Andra tips på intressanta böcker mottages också..

Medlem sedan okt. 2002188 inlägg
#9

Skoj :)

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

Andra tips på intressanta böcker mottages också..

Medlem sedan maj 20012 812 inlägg
#10

Har hittat dessa tips på länkar som man kan läsa.

* In every good book about object oriented programming. Business objects are just object oriented programming.

* In websites dealing with the topic, such as the wirintgs of Scott Ambler (http://www.ambysoft.com)

* Follow Cetus Links (http://www.cetus-links.com/, to go "O/R mapper"

* 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 :)

- M

Medlem sedan okt. 2002188 inlägg
#11

Tackar Gladh

denna länken var ju helt underbar, http://www.cetus-links.com/

Får hoppas man hittar jobb snart så man kan skaffa en laptop, då kan man läsa i sängen också.. :P :P

/w
ps.
Thona är en ganska rolig figur förresten.. :)

Älskar julsmileys..

ds.

Medlem sedan juli 20011 304 inlägg
#12

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...

Medlem sedan okt. 2002188 inlägg
#13

Hej igen..

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.

http://www.asp.net/Forums/ShowPost.aspx?tabindex=1&PostID=352119

Medlem sedan maj 20012 812 inlägg
#14

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.

- M

Medlem sedan juli 20011 304 inlägg
#15

Fina tips som vanligt :bire

Medlem sedan juli 20011 304 inlägg
#16

... men lite fler frågor dök upp:

Vad är och var hittas MS Cache?

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?

Medlem sedan sep. 20011 914 inlägg
#17

Antar det är detta. MS Cache info, nedladding och forum.

red// blev lite fel första gången

Medlem sedan juli 20011 304 inlägg
#18

Ja. det tror jag med. Kom just på det. Ska nog inte sitta mer framför datorn idag :r

Medlem sedan maj 20012 812 inlägg
#19

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.

- M

Medlem sedan okt. 2002188 inlägg
#20

Hej

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..

268 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)