ObjectRelational Mapping NHibernate ORM ObjectRelational mapping aka ORM
Object-Relational Mapping NHibernate
ORM? � Object-Relational mapping � (aka O/RM, ORM, and O/R mapping) � Mappning av objekt och dess relationer till/från en relationsdatabas.
Bakgrund � Databas � Data ligger i tabeller, kolumner, rader � Programmering � Data hanteras i hierarkiskt inkapslade objekt � Object-relational impedance mismatch
Manuell mappning
ORM Grunder � � Transparent persistence Mappning mellan klasser och databas � XML � Attributer � Genererar SQL dynamiskt � Möjliggör stöd för flera databaser
Vad är NHibernate? � � � ORM ramverk för. NET Baserad på ett populärt Java ramverk Open Source (LGPL)
En vanlig klass
XML Mappning
Insert/Update
Select
Mappningsalternativ � � � Klasser behöver ej ärva någon specifik basklass En tabell till flera klasser, en klass till flera tabeller Stöder många olika relationer (1 -1, 1 -n, n-n) � Relationer hanteras genom standard. NET collections (även generiska) � Arv
Relationer - Databas
Relationer - Klasser
Relationer - Mappning
Relationer
Cascades � � � none save-update delete-orphans all-delete-orhpans
Lazy Loading � NHibernate kan konfigureras så att ett objekts relationer endast laddas från databasen när det används.
Arv � NHibernate klarar av tre olika strategier för att hantera arv � En tabell för hela arvhierarkin � En tabell för varje subklass � En tabell för varje konkret klass
Arv – Exempel
Arv - Exempel
Arkitektur Transient Objects Application Persistent Objects Session. Factory Session Transaction. Factory ADO. NET Transaction Connection. Provider ODBC Database OLE DB
Prestanda � � � Genererar bra optimerad SQL som ofta är lika snabb eller snabbare än en handskriven Stored Procedure Tillhandhåller olika stöd för cachning som kan ge stora prestandaförbättringar. Vid skrivning / läsning kan NHibernate vara lite långsammare än en handskriven ADO. NET lösning.
Kritik / Problem � � � Lite av en svart låda Kan vara svårt att introducera i ett befintligt system Komposita nycklar kan ibland skapa problem, speciellt när det används för att identifiera relationer Kan ta tid att få grepp på alla funktioner Ej integrerad med Visual Studio (dvs. inget designer stöd)
Vad gör Microsoft? � � LINQ To SQL Entity Framework
LINQ to SQL � Fördelar � Integrerad med Visual Studio � Lätt att komma igång � Stöder LINQ syntax � Nackdelar � Begränsat stöd för arv � En tabell kan bara mappas till en klass � Fungerar bara mot Microsoft SQL Server � Stöder inte many-to-many relationer
Summering - Varför NHibernate? � � Utvecklaren behöver spendera mindre tid till ”persistence plumbing” Leder till applikationer som är lättare att underhålla Flexibelt / Funktionsrikt Stor användarbas för båda java och. NET versionen � Lätt att få hjälp � Bra dokumentation
Info � � Presentationerna finns på intranätet Exempelapplikationer � Log 4 Net. Demo � NHibernate. Example. Simple � NHibernate. Demo � � Email: torkel. odegaard@cybercom. se Blogg: www. codinginstinct. com
- Slides: 27