De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

NHibernate in DeltaShell. Wat is NHibernate? Object-Relational Mapper Database /tabel(len)/ rijen Geheugen / Class/.Net CLR object.

Verwante presentaties


Presentatie over: "NHibernate in DeltaShell. Wat is NHibernate? Object-Relational Mapper Database /tabel(len)/ rijen Geheugen / Class/.Net CLR object."— Transcript van de presentatie:

1 NHibernate in DeltaShell

2 Wat is NHibernate? Object-Relational Mapper Database /tabel(len)/ rijen Geheugen / Class/.Net CLR object

3 Waarom NHibernate? Abstractie boven de DB (db- agnostisch) Minder onderhoud dan sql queries Rijk, ‘oud’ port van Java Hibernate Lazy loading, dirty checking etc Schema-export /update

4 Configuratie: via app.config

NHibernate.Connection.DriverConnectionProvider NHibernate.Dialect.MsSql2005Dialect NHibernate.Driver.SqlClientDriver Server=xp;initial catalog=DataManagerTest;Integrated Security=SSPI NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu

5 Configuratie : in code (runtime) (Her)Configureren via properties Toevoegen mappings (AddAssemblie) Bepalen naming-strategies Toevoegen DataAccessListeners

6 NHibernate entititeiten Configuration Mappings Connection String Settings SessionFactory OpenSession Session Load() Save() Transactions

7 Voorbeeld: VM opslaan en app.config

8 Nhibernate object states

9 1 hbm.xml file per class Voeg NHibernate.xsd’s toe aan VS Embedded resource!! Zeg zo weinig mogelijk in je mappings Surrogaat key ID Configuratie : mapping files

10 Voorbeeld mapping : Profile

11 Verschillende relaties One-to-many (Map.Layers) –Foreign key in child-table –Mapping : In Set,List Bag mapping van parent Many-to-one (CoverageLayer.Coverage) –Foreign key in child-table –Mapping : in childmapping

12 Verschillende relaties 2 Many-to-many (Variable- >Arguments) –In aparte koppel tabel –Mapping : in Collectie element (List,Set bag etc) One-to-One –Relatie tussen primary keys –Mapping: in Parent (Person.Address) –Not recommended (lazy etc)

13 One-to-many Parent / Child Map / Layer Mapping in collectie in parent:

14 One-to-many : tabellen

15 Many-to-one Mapping in child

16 Many-to-one : tabellen

17 Many-to-many Mapping aan een of beide kanten

18 Many-to-many : tabellen

19 Any-type mappings Foreign key naar willekeurige tabel Mapping in ‘parent’ (a la many-to- one)

20 Any-type : tabellen Geen ‘echte’ foreign keys Restrictie in primary key type van gemapped classes Uitzonderings situatie, vaak is er een betere oplossing

21 Inheritance Table-per-classhierarchy Table-per-subclass Table-per-concrete-class

22 Inheritance: table-per- classhierarchy Alle entiteiten in 1 tabel Subclass met discriminator Discriminator column voor types Goede performance Sparse tabel Ongewilde relaties tussen subclasses (column types)

23 Inheritance: table per concrete class Geen associaties op base class niveau Union-subclass Niet genormaliseerd Zelfde property in veel tabellen

24 Inheritance : table-per- subclass Meest OO (weinig redundantie) Geen wijziging base-class tabellen Lage performance Join(s) voor enkele entiteit

25 Inheritance :kiezen Table-per-classhierarchy –Simpel : 1 st keus Table-per-subclass –Als optie 1 te groot of als er een duidelijke scheiding in het schema moet komen Table-per-concrete-class

26 Acces-strategies Property : default map naar public property Field: map naar field. Geef fieldnaam op in mapping (als geen naming strategie) NoSetter: als field maar gebruikt property voor Get (Readonly) Custom (eigen class)

27 Naming-strategies Hoe kom ik van een public property naar het bijbehorende field? –Camelcase –Camelcase_ –Lowercase –…

28 Acces strategy --> /joined-subclass >

29 Cascade object relaties Eigenaar van object? Zet een cascade op. Object relaties :many-to-one,one-to-many,many-to-many Opties –All :save-update-delete van relatie –Save-Update : geen delete –All-delete-orphan: all+als een object uit alle collecties delete het (orphan) –None: object zorgt voor zichzelf

30 Lazy classes Default is lazy! Alle public accessors (methods properties) moeten virtueel. Proxy objecten Open session is nodig (onhandig voor web)

31 Usertypes Alleen als niet als anders kan Custom opslag van en naar byte[] Geen foreign keys Geen updates Voorbeeld : GeometryUserType

32 DeltaShell: Database structuur Project Folder Model DataItem Coverage Map Layer Project is root Zorg voor juiste ‘cascade’ regels zodat je object opgeslagen wordt.

33 DataItem Value Types Any type mapping: foreign key naar meerdere tabellen Zorg er voor dat je object wordt teruggeven door een DataProvider.SupportedDataObjectNames

34 DataAccessListeners Run code bij bepaalde database acties (pre-insert, post- load etc) Nu alleen FileBased DAL. –Herschijft bestands namen –Reconnect bij save-as public bool OnPreInsert(object entity, object[] state, string[] propertyNames) { if (entity is IFileBased) { MakePathRelative(entity as IFileBased, state, propertyNames); } return false;//no veto }

35 Mappen van Modellen Voeg modeldata toe in DataItems Map de modeldata data classes Zorg ervoor dat deze classes in de any-type van DataItem terecht komen via dataProviders. OF : maak custom mappings

36 NHibernate binnen test NHibernate configuratie is static Voeg zelf assemblies toe met –NHibernateProjectRepository.RegisterAssembly() Voeg DataItem ValueType mappings toe met –NHibernateProjectRepository.RegisterDataItemValueType Reset static configuratie met –NHibernateProjectRepository.ResetConfiguration()

37 Veel voorkomende fouten Key not found exception -> DataItemType Event registratie en Nhibernate –Nhibernate set properties dus unsubscribe/subscribe daar. Unmapped class –Geen embedded resource?

38 Nhibernate Profiler Demo in VM. Download trial van Ayende

39 NHibernate Linq IQueryable  SQL Demo2 in VM

40 Nog meer!!? NHibernate in Action van manning Ayende’s blog ActiveRecord Fluent-Nhibernate


Download ppt "NHibernate in DeltaShell. Wat is NHibernate? Object-Relational Mapper Database /tabel(len)/ rijen Geheugen / Class/.Net CLR object."

Verwante presentaties


Ads door Google