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

Lviv .Net User Group. NHibernate

on

  • 1,262 views

 

Statistics

Views

Total Views
1,262
Views on SlideShare
1,226
Embed Views
36

Actions

Likes
0
Downloads
16
Comments
0

4 Embeds 36

http://dotnetug-lviv.blogspot.com 32
http://www.linkedin.com 2
http://dotnetug-lviv.blogspot.dk 1
https://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • 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

Lviv .Net User Group. NHibernate Lviv .Net User Group. NHibernate Presentation Transcript

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