NHibernate in Action - UMLChina-

Download Report

Transcript NHibernate in Action - UMLChina-

NHibernate in Action
Web Seminar at UMLChina
By Pierre Henri Kuaté
2008/08/27
http://www.manning.com/kuate/
Object/Relational Mapping (ORM)
Persistence technique
 Allows Object-Oriented Programming
 Supports Relational Database
 Enables many positive design principles:

◦ Separation of concerns
◦ Domain Driven Development
◦ Test Driven Development
NHibernate
ORM library implemented using .NET
 Port of the Java library called Hibernate
 Database-independent (almost)
 Provides most advanced features
 Free, open source and mature

Persistence
Make data outlives the execution of the
program that created it
 Commonly known as CRUD operations
CRUD = Create, Retrieve, Update, Delete
 Manipulates entities in an object-oriented
language
 Data persisted in tables of a relational
database

Entity
Object-oriented class (inheritance and
polymorphism)
 Encapsulates fields using properties
 Use methods to implement business logic
 No constraint on the structure (DataSet
is not an entity)
 Effective tools for software engineering

Table
Set of data
 Contains columns and rows
 Supports the relational algebra
 Effective tools for data manipulation

Entities are best for modeling a
business domain
Tables are best for efficient
persistence
NHibernate Configuration
Process

Provide information:
◦ Database connection details
◦ Entities mapping


Mapping of entities to tables
Using .NET attributes:
[Class]
public class Animal {
Auto generate the database
tables with one line of code
Use a NHibernate session to
access the database:
using(ISession session =
sessionFactory.OpenSession())
using(session.BeginTransaction()) {
// Use NHibernate here
session.Transaction.Commit();
}
[Id(Name="Id")]
[Generator(1, Class="native")]
public int Id { get; set; }
[Property]
public string Name { get; set; }
}
Object/Relational Mapping brings
the best of both worlds

Save entities (Object-oriented; no SQL!)
var eagle = new Animal(2, "Eagle", "2 paws", "2 wings");
nhibernateSession.Save(eagle);

Load entities
var eagle = nhibernateSession.Get<Animal>(2);

Using queries
◦ HQL: Hibernate Query Language
◦ QBC: Query by Criteria
◦ Linq for NHibernate (in beta)
Linq for NHibernate

Language Integrated Query (LINQ)

“Adds native data querying capabilities to .NET
languages using a syntax reminiscent of SQL”
var result = from lb in _session.Linq<LivingBeing>()
where lb.Name.Contains("e")
orderby lb.Name
select lb;
Potentially faster than hand-coded SQL commands due
to caching, batching, lazy loading and other performance
optimizations.

To Learn More
NHibernate Website:
http://www.nhibernate.org/
 NHibernate Resources:
http://www.hibernate.org/365.html
 NHibernate in Action:
http://www.manning.com/kuate/
 NHibernate Forum:

http://forum.hibernate.org/viewforum.php?f=25