SlideShare a Scribd company logo
1 of 19
NHibernate by Andriy Buday
Outline Q1: What is NHibernate? Q2: Why do I need it? Q3: How does it look like? Concepts DEMO 1: Hello World! Q4: How can I proceed with it? Queries More about mapping, querying, usage patterns DEMO 2: Customer-Orders-Products http://andriybuday.blogspot.com/ Let see… will we get what we want!
Q1: What is NHibernate?NHibernate is… ORM New level of Abstraction http://andriybuday.blogspot.com/ Paradigm mismatch
Q2: Why Do I need it?Because… http://andriybuday.blogspot.com/ Development speed increases Reducing database work Optimizes access to DB, so could even perform better than plain ADO.NET You think in terms of business model, not database More time for real programming
Q2: Why Do I need it?Why do I like NHibernate? http://andriybuday.blogspot.com/ Mature Free & Open Source Good community support Flexible Allows you do Domain Driven Design You asked for comparison with other ORM… LINQ to SQL doesn’t really lead you to good models Entity Framework has better Linq and it is Microsoft Visit http://ormbattle.net/ for performance numbers Google.Search(string.Format“Nhibernate vs. {0}”, yourORM);
Q3: How does it look like?Concepts: Unit of Work http://andriybuday.blogspot.com/ Kind of “workspace” within which you can do anything you want A Unit Of Work either success or fails as a unit Conceptually like database transactions In NHibernate we have ISession which does the same Conceptually we have the same for in ADO.NET as DataSet
Q3: How does it look like?Concepts: ISession http://andriybuday.blogspot.com/ Open a session We get it from the session factory We do some work Session.Add(…) Session.Delete(…) Commit the session Session.Flush(…)
Q3: How does it look like?Concepts: ISessionFactory http://andriybuday.blogspot.com/ We are getting our session through this class Very expensive to create One per database or application
Q3: How does it look like?Concepts: Summary http://andriybuday.blogspot.com/ Configuration Class builds Session Factory Session Factory builds Session Session is used as Unit Of Work to interaction with objects and persist to underlying database var sessionFactory = newConfiguration().Configure().BuildSessionFactory();       using (var session = sessionFactory.OpenSession()) { var customer = newCustomer();     session.SaveOrUpdate(customer);     session.Flush();  }
Q3: How does it look like?Architecture: and look from inside? http://andriybuday.blogspot.com/
Q3: How does it look like?DEMO: Hello World! http://andriybuday.blogspot.com/ Just basics… to refresh our minds 
Q4: How can I proceed with it? More on Query API http://andriybuday.blogspot.com/ Criteria API Object oriented querying ICriteria chaining Easy to write Hard to read HQL API String based Parameterized Similar to SQL Speak in terms of Objects More flexible “from Customer c where c.FirstName = :firstName” session.CreateCriteria(typeof(Customer))     .Add(Restrictions.Eq("FirstName", "Hello"))
Q4: How can I proceed with it? Mapping http://andriybuday.blogspot.com/ <hibernate-mappingxmlns="urn:nhibernate-mapping-2.2"default-lazy="true"assembly="LearningNHibernate"namespace="LearningNHibernate">   <classname="Customer"table="Customer"xmlns="urn:nhibernate-mapping-2.2">     <idname="CustomerId"column="CustomerId"type="Int32">       <generatorclass="identity" />     </id>     <propertyname="FirstName"column="Firstname"length="50"type="String">       <columnname="Firstname" />     </property>     <propertyname="LastName"column="Lastname"length="50"type="String">       <columnname="Lastname" />     </property>   </class> </hibernate-mapping> publicclassCustomerMap : ClassMap<Customer>     { public CustomerMap()         {             WithTable("Customer");             Id(x => x.CustomerId);             Map(x => x.FirstName, "Firstname");             Map(x => x.LastName, "Lastname").WithLengthOf(50);         }     }
Q4: How can I proceed with it? Fetch strategies http://andriybuday.blogspot.com/ Lazy loading Default for all collections Members are loaded from database when assessed Usually good for performance Session has to stay OPEN Eager Fetching Use when you sure you’ll use data OUTER joins
Q4: How can I proceed with it? Caching, batching, concurrency http://andriybuday.blogspot.com/ First level cache Following will run only one SELECT Second level cache Within two sessions you still run one SELECT It is needed to explicitly turn it on everywhere Batch processing <property name="adonet.batch_size">250</property> Concurrency <version name="Version" column="Version"/>  var customer1 = session.Get<Customer>(5); var customer2 = session.Get<Customer>(5);
Q4: How can I proceed with it? http://andriybuday.blogspot.com/ Use FluentNhibernate to do not bore developers with XML Create wrappers to have NHibernateRepository Implement UnitOfWork VS projects Two ways for kick-off From database to Objects From objects to Database
DEMO 2: Mapping, Querying, LazyLoad, etc.. http://andriybuday.blogspot.com/ Damn it! Let’s write some code again!
Read blog! Follow me! Visit LVIV .NET UG! http://andriybuday.blogspot.com/ http://andriybuday.blogspot.com/ @andriybuday andriybuday@gmail.com http://dotnetug-lviv.blogspot.com/
Links http://andriybuday.blogspot.com/ My blog: http://andriybuday.blogspot.com Lviv .NET User Group: http://dotnetug-lviv.blogspot.com/ NHibernate: Home Page: http://nhibernate.com/ Reference: http://www.nhforge.org/doc/nh/en/index.html Great series of screencasts on NHibernate: http://www.summerofnhibernate.com/ ORM with NHibernate screen cast (2 hours) http://www.flux88.com/uploads/ORMWithNHibernateScreenCast.wmv Tools: Profiler: http://nhprof.com/ Fluent NHibernate: http://fluentnhibernate.org/ MyGeneration: http://www.mygenerationsoftware.com/

More Related Content

Similar to Introduction to NHibernate ORM Framework

Enterprise PHP (PHP London Conference 2008)
Enterprise PHP (PHP London Conference 2008)Enterprise PHP (PHP London Conference 2008)
Enterprise PHP (PHP London Conference 2008)Ivo Jansch
 
Gits class #22: [ONLINE] Analyze Your User's Activities Using BigQuery and Da...
Gits class #22: [ONLINE] Analyze Your User's Activities Using BigQuery and Da...Gits class #22: [ONLINE] Analyze Your User's Activities Using BigQuery and Da...
Gits class #22: [ONLINE] Analyze Your User's Activities Using BigQuery and Da...GITS Indonesia
 
Behavior & Specification Driven Development in PHP - #OpenWest
Behavior & Specification Driven Development in PHP - #OpenWestBehavior & Specification Driven Development in PHP - #OpenWest
Behavior & Specification Driven Development in PHP - #OpenWestJoshua Warren
 
An Introduction to Microservices
An Introduction to MicroservicesAn Introduction to Microservices
An Introduction to MicroservicesAd van der Veer
 
Php mysql-training online-by_php2ranjan
Php mysql-training online-by_php2ranjanPhp mysql-training online-by_php2ranjan
Php mysql-training online-by_php2ranjanphp2ranjan
 
php training in hyderabad
php training in hyderabadphp training in hyderabad
php training in hyderabadphp2ranjan
 
Semantic logging with etw and slab from DCC 10/16
Semantic logging with etw and slab from DCC 10/16Semantic logging with etw and slab from DCC 10/16
Semantic logging with etw and slab from DCC 10/16Chris Holwerda
 
Developer Night - Opticon18
Developer Night - Opticon18Developer Night - Opticon18
Developer Night - Opticon18Optimizely
 
2019 StartIT - Boosting your performance with Blackfire
2019 StartIT - Boosting your performance with Blackfire2019 StartIT - Boosting your performance with Blackfire
2019 StartIT - Boosting your performance with BlackfireMarko Mitranić
 
Fuel for a great web experience
Fuel for a great web experienceFuel for a great web experience
Fuel for a great web experienceChristian Heilmann
 
Dev Ops for systems of record - Talk at Agile Australia 2015
Dev Ops for systems of record - Talk at Agile Australia 2015Dev Ops for systems of record - Talk at Agile Australia 2015
Dev Ops for systems of record - Talk at Agile Australia 2015Mirco Hering
 
Techmindz: Custom Corporate Learning Platform Services in Kochi
Techmindz: Custom Corporate Learning Platform Services in KochiTechmindz: Custom Corporate Learning Platform Services in Kochi
Techmindz: Custom Corporate Learning Platform Services in KochiTechmindz Kochi
 
report_vendor_connect
report_vendor_connectreport_vendor_connect
report_vendor_connectYash Mittal
 
Workshop - The Little Pattern That Could.pdf
Workshop - The Little Pattern That Could.pdfWorkshop - The Little Pattern That Could.pdf
Workshop - The Little Pattern That Could.pdfTobiasGoeschel
 
Machine Learning Platform in LINE Fukuoka
Machine Learning Platform in LINE FukuokaMachine Learning Platform in LINE Fukuoka
Machine Learning Platform in LINE FukuokaLINE Corporation
 
PHP Sessions and Non-Sessions
PHP Sessions and Non-SessionsPHP Sessions and Non-Sessions
PHP Sessions and Non-SessionsSven Rautenberg
 
How Do You Know that Gal Knows Drupal? Towards an Open Source Curriculum and ...
How Do You Know that Gal Knows Drupal? Towards an Open Source Curriculum and ...How Do You Know that Gal Knows Drupal? Towards an Open Source Curriculum and ...
How Do You Know that Gal Knows Drupal? Towards an Open Source Curriculum and ...Dominik Lukes
 
AD113 Speed Up Your Applications w/ Nginx and PageSpeed
AD113  Speed Up Your Applications w/ Nginx and PageSpeedAD113  Speed Up Your Applications w/ Nginx and PageSpeed
AD113 Speed Up Your Applications w/ Nginx and PageSpeededm00se
 
Building a Beer Recommender with Yhat (PAPIs.io - November 2014)
Building a Beer Recommender with Yhat (PAPIs.io - November 2014)Building a Beer Recommender with Yhat (PAPIs.io - November 2014)
Building a Beer Recommender with Yhat (PAPIs.io - November 2014)Austin Ogilvie
 

Similar to Introduction to NHibernate ORM Framework (20)

Enterprise PHP (PHP London Conference 2008)
Enterprise PHP (PHP London Conference 2008)Enterprise PHP (PHP London Conference 2008)
Enterprise PHP (PHP London Conference 2008)
 
Gits class #22: [ONLINE] Analyze Your User's Activities Using BigQuery and Da...
Gits class #22: [ONLINE] Analyze Your User's Activities Using BigQuery and Da...Gits class #22: [ONLINE] Analyze Your User's Activities Using BigQuery and Da...
Gits class #22: [ONLINE] Analyze Your User's Activities Using BigQuery and Da...
 
Behavior & Specification Driven Development in PHP - #OpenWest
Behavior & Specification Driven Development in PHP - #OpenWestBehavior & Specification Driven Development in PHP - #OpenWest
Behavior & Specification Driven Development in PHP - #OpenWest
 
An Introduction to Microservices
An Introduction to MicroservicesAn Introduction to Microservices
An Introduction to Microservices
 
Performance Tuning with XHProf
Performance Tuning with XHProfPerformance Tuning with XHProf
Performance Tuning with XHProf
 
Php mysql-training online-by_php2ranjan
Php mysql-training online-by_php2ranjanPhp mysql-training online-by_php2ranjan
Php mysql-training online-by_php2ranjan
 
php training in hyderabad
php training in hyderabadphp training in hyderabad
php training in hyderabad
 
Semantic logging with etw and slab from DCC 10/16
Semantic logging with etw and slab from DCC 10/16Semantic logging with etw and slab from DCC 10/16
Semantic logging with etw and slab from DCC 10/16
 
Developer Night - Opticon18
Developer Night - Opticon18Developer Night - Opticon18
Developer Night - Opticon18
 
2019 StartIT - Boosting your performance with Blackfire
2019 StartIT - Boosting your performance with Blackfire2019 StartIT - Boosting your performance with Blackfire
2019 StartIT - Boosting your performance with Blackfire
 
Fuel for a great web experience
Fuel for a great web experienceFuel for a great web experience
Fuel for a great web experience
 
Dev Ops for systems of record - Talk at Agile Australia 2015
Dev Ops for systems of record - Talk at Agile Australia 2015Dev Ops for systems of record - Talk at Agile Australia 2015
Dev Ops for systems of record - Talk at Agile Australia 2015
 
Techmindz: Custom Corporate Learning Platform Services in Kochi
Techmindz: Custom Corporate Learning Platform Services in KochiTechmindz: Custom Corporate Learning Platform Services in Kochi
Techmindz: Custom Corporate Learning Platform Services in Kochi
 
report_vendor_connect
report_vendor_connectreport_vendor_connect
report_vendor_connect
 
Workshop - The Little Pattern That Could.pdf
Workshop - The Little Pattern That Could.pdfWorkshop - The Little Pattern That Could.pdf
Workshop - The Little Pattern That Could.pdf
 
Machine Learning Platform in LINE Fukuoka
Machine Learning Platform in LINE FukuokaMachine Learning Platform in LINE Fukuoka
Machine Learning Platform in LINE Fukuoka
 
PHP Sessions and Non-Sessions
PHP Sessions and Non-SessionsPHP Sessions and Non-Sessions
PHP Sessions and Non-Sessions
 
How Do You Know that Gal Knows Drupal? Towards an Open Source Curriculum and ...
How Do You Know that Gal Knows Drupal? Towards an Open Source Curriculum and ...How Do You Know that Gal Knows Drupal? Towards an Open Source Curriculum and ...
How Do You Know that Gal Knows Drupal? Towards an Open Source Curriculum and ...
 
AD113 Speed Up Your Applications w/ Nginx and PageSpeed
AD113  Speed Up Your Applications w/ Nginx and PageSpeedAD113  Speed Up Your Applications w/ Nginx and PageSpeed
AD113 Speed Up Your Applications w/ Nginx and PageSpeed
 
Building a Beer Recommender with Yhat (PAPIs.io - November 2014)
Building a Beer Recommender with Yhat (PAPIs.io - November 2014)Building a Beer Recommender with Yhat (PAPIs.io - November 2014)
Building a Beer Recommender with Yhat (PAPIs.io - November 2014)
 

More from Dima Maleev

JavaScript in Mobile Development
JavaScript in Mobile DevelopmentJavaScript in Mobile Development
JavaScript in Mobile DevelopmentDima Maleev
 
Fear and Loathing at PhoneGap
Fear and Loathing at PhoneGapFear and Loathing at PhoneGap
Fear and Loathing at PhoneGapDima Maleev
 
Development Applications for Chrome OS
Development Applications for Chrome OSDevelopment Applications for Chrome OS
Development Applications for Chrome OSDima Maleev
 
Go mobile with Windows Phone
Go mobile with Windows PhoneGo mobile with Windows Phone
Go mobile with Windows PhoneDima Maleev
 
Time. To manage, or not to manage
Time. To manage, or not to manageTime. To manage, or not to manage
Time. To manage, or not to manageDima Maleev
 
Parallel extensions in .Net 4.0
Parallel extensions in .Net 4.0Parallel extensions in .Net 4.0
Parallel extensions in .Net 4.0Dima Maleev
 
Создание SharePoint 2010 решений в Visual Studio
Создание SharePoint 2010 решений в Visual StudioСоздание SharePoint 2010 решений в Visual Studio
Создание SharePoint 2010 решений в Visual StudioDima Maleev
 
24000 Days Of UX
24000 Days Of UX24000 Days Of UX
24000 Days Of UXDima Maleev
 
Developing silverlight applications for windows phone 7 series
Developing silverlight applications for windows phone 7 seriesDeveloping silverlight applications for windows phone 7 series
Developing silverlight applications for windows phone 7 seriesDima Maleev
 
New Features Of ASP.Net 4 0
New Features Of ASP.Net 4 0New Features Of ASP.Net 4 0
New Features Of ASP.Net 4 0Dima Maleev
 

More from Dima Maleev (13)

Mems
MemsMems
Mems
 
JavaScript in Mobile Development
JavaScript in Mobile DevelopmentJavaScript in Mobile Development
JavaScript in Mobile Development
 
Fear and Loathing at PhoneGap
Fear and Loathing at PhoneGapFear and Loathing at PhoneGap
Fear and Loathing at PhoneGap
 
Development Applications for Chrome OS
Development Applications for Chrome OSDevelopment Applications for Chrome OS
Development Applications for Chrome OS
 
Gamification
GamificationGamification
Gamification
 
Go mobile with Windows Phone
Go mobile with Windows PhoneGo mobile with Windows Phone
Go mobile with Windows Phone
 
Time. To manage, or not to manage
Time. To manage, or not to manageTime. To manage, or not to manage
Time. To manage, or not to manage
 
Parallel extensions in .Net 4.0
Parallel extensions in .Net 4.0Parallel extensions in .Net 4.0
Parallel extensions in .Net 4.0
 
Создание SharePoint 2010 решений в Visual Studio
Создание SharePoint 2010 решений в Visual StudioСоздание SharePoint 2010 решений в Visual Studio
Создание SharePoint 2010 решений в Visual Studio
 
24000 Days Of UX
24000 Days Of UX24000 Days Of UX
24000 Days Of UX
 
Developing silverlight applications for windows phone 7 series
Developing silverlight applications for windows phone 7 seriesDeveloping silverlight applications for windows phone 7 series
Developing silverlight applications for windows phone 7 series
 
New Features Of ASP.Net 4 0
New Features Of ASP.Net 4 0New Features Of ASP.Net 4 0
New Features Of ASP.Net 4 0
 
Microsoft Azure
Microsoft AzureMicrosoft Azure
Microsoft Azure
 

Recently uploaded

Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 

Recently uploaded (20)

Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 

Introduction to NHibernate ORM Framework

  • 2. Outline Q1: What is NHibernate? Q2: Why do I need it? Q3: How does it look like? Concepts DEMO 1: Hello World! Q4: How can I proceed with it? Queries More about mapping, querying, usage patterns DEMO 2: Customer-Orders-Products http://andriybuday.blogspot.com/ Let see… will we get what we want!
  • 3. Q1: What is NHibernate?NHibernate is… ORM New level of Abstraction http://andriybuday.blogspot.com/ Paradigm mismatch
  • 4. Q2: Why Do I need it?Because… http://andriybuday.blogspot.com/ Development speed increases Reducing database work Optimizes access to DB, so could even perform better than plain ADO.NET You think in terms of business model, not database More time for real programming
  • 5. Q2: Why Do I need it?Why do I like NHibernate? http://andriybuday.blogspot.com/ Mature Free & Open Source Good community support Flexible Allows you do Domain Driven Design You asked for comparison with other ORM… LINQ to SQL doesn’t really lead you to good models Entity Framework has better Linq and it is Microsoft Visit http://ormbattle.net/ for performance numbers Google.Search(string.Format“Nhibernate vs. {0}”, yourORM);
  • 6. Q3: How does it look like?Concepts: Unit of Work http://andriybuday.blogspot.com/ Kind of “workspace” within which you can do anything you want A Unit Of Work either success or fails as a unit Conceptually like database transactions In NHibernate we have ISession which does the same Conceptually we have the same for in ADO.NET as DataSet
  • 7. Q3: How does it look like?Concepts: ISession http://andriybuday.blogspot.com/ Open a session We get it from the session factory We do some work Session.Add(…) Session.Delete(…) Commit the session Session.Flush(…)
  • 8. Q3: How does it look like?Concepts: ISessionFactory http://andriybuday.blogspot.com/ We are getting our session through this class Very expensive to create One per database or application
  • 9. Q3: How does it look like?Concepts: Summary http://andriybuday.blogspot.com/ Configuration Class builds Session Factory Session Factory builds Session Session is used as Unit Of Work to interaction with objects and persist to underlying database var sessionFactory = newConfiguration().Configure().BuildSessionFactory(); using (var session = sessionFactory.OpenSession()) { var customer = newCustomer(); session.SaveOrUpdate(customer); session.Flush(); }
  • 10. Q3: How does it look like?Architecture: and look from inside? http://andriybuday.blogspot.com/
  • 11. Q3: How does it look like?DEMO: Hello World! http://andriybuday.blogspot.com/ Just basics… to refresh our minds 
  • 12. Q4: How can I proceed with it? More on Query API http://andriybuday.blogspot.com/ Criteria API Object oriented querying ICriteria chaining Easy to write Hard to read HQL API String based Parameterized Similar to SQL Speak in terms of Objects More flexible “from Customer c where c.FirstName = :firstName” session.CreateCriteria(typeof(Customer)) .Add(Restrictions.Eq("FirstName", "Hello"))
  • 13. Q4: How can I proceed with it? Mapping http://andriybuday.blogspot.com/ <hibernate-mappingxmlns="urn:nhibernate-mapping-2.2"default-lazy="true"assembly="LearningNHibernate"namespace="LearningNHibernate">   <classname="Customer"table="Customer"xmlns="urn:nhibernate-mapping-2.2">     <idname="CustomerId"column="CustomerId"type="Int32">       <generatorclass="identity" />     </id>     <propertyname="FirstName"column="Firstname"length="50"type="String">       <columnname="Firstname" />     </property>     <propertyname="LastName"column="Lastname"length="50"type="String">       <columnname="Lastname" />     </property>   </class> </hibernate-mapping> publicclassCustomerMap : ClassMap<Customer> { public CustomerMap() { WithTable("Customer"); Id(x => x.CustomerId); Map(x => x.FirstName, "Firstname"); Map(x => x.LastName, "Lastname").WithLengthOf(50); } }
  • 14. Q4: How can I proceed with it? Fetch strategies http://andriybuday.blogspot.com/ Lazy loading Default for all collections Members are loaded from database when assessed Usually good for performance Session has to stay OPEN Eager Fetching Use when you sure you’ll use data OUTER joins
  • 15. Q4: How can I proceed with it? Caching, batching, concurrency http://andriybuday.blogspot.com/ First level cache Following will run only one SELECT Second level cache Within two sessions you still run one SELECT It is needed to explicitly turn it on everywhere Batch processing <property name="adonet.batch_size">250</property> Concurrency <version name="Version" column="Version"/> var customer1 = session.Get<Customer>(5); var customer2 = session.Get<Customer>(5);
  • 16. Q4: How can I proceed with it? http://andriybuday.blogspot.com/ Use FluentNhibernate to do not bore developers with XML Create wrappers to have NHibernateRepository Implement UnitOfWork VS projects Two ways for kick-off From database to Objects From objects to Database
  • 17. DEMO 2: Mapping, Querying, LazyLoad, etc.. http://andriybuday.blogspot.com/ Damn it! Let’s write some code again!
  • 18. Read blog! Follow me! Visit LVIV .NET UG! http://andriybuday.blogspot.com/ http://andriybuday.blogspot.com/ @andriybuday andriybuday@gmail.com http://dotnetug-lviv.blogspot.com/
  • 19. Links http://andriybuday.blogspot.com/ My blog: http://andriybuday.blogspot.com Lviv .NET User Group: http://dotnetug-lviv.blogspot.com/ NHibernate: Home Page: http://nhibernate.com/ Reference: http://www.nhforge.org/doc/nh/en/index.html Great series of screencasts on NHibernate: http://www.summerofnhibernate.com/ ORM with NHibernate screen cast (2 hours) http://www.flux88.com/uploads/ORMWithNHibernateScreenCast.wmv Tools: Profiler: http://nhprof.com/ Fluent NHibernate: http://fluentnhibernate.org/ MyGeneration: http://www.mygenerationsoftware.com/

Editor's Notes

  1. Hello,Lviv .NET User Group!
  2. Hibernate&apos;s goal is to relieve the developer from 95 percent of common data persistence related programming tasks, compared to manual coding with SQL It handles persisting plain .NET objects to and from an underlying relational database.Nhibernate is an abstraction layer at the top of you database.
  3. It is matureCommunity…Get answers quickly…Has definite path…Have community feedback
  4. This should be simple app… maybe console..I’m going to show few inserts including message “Hello World!” Good to show Nprof in action with this
  5. Todo: add code samples