SlideShare una empresa de Scribd logo
1 de 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/

Más contenido relacionado

Similar a Lviv .Net User Group. NHibernate

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
Joshua Warren
 
report_vendor_connect
report_vendor_connectreport_vendor_connect
report_vendor_connect
Yash Mittal
 

Similar a Lviv .Net User Group. NHibernate (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)
 

Más de 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
 

Último

CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 

Último (20)

GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdf
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 

Lviv .Net User Group. NHibernate

  • 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/

Notas del editor

  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