Your SlideShare is downloading. ×
Lviv .Net User Group. NHibernate
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Lviv .Net User Group. NHibernate

1,012
views

Published on

Published in: Technology

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,012
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
17
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • Hello,Lviv .NET User Group!
  • Hibernate'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.
  • It is matureCommunity…Get answers quickly…Has definite path…Have community feedback
  • 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
  • Todo: add code samples
  • Transcript

    • 1. NHibernate
      by Andriy Buday
    • 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/