net database technologies
TRANSCRIPT
![Page 1: NET Database Technologies](https://reader034.vdocuments.us/reader034/viewer/2022051404/5876086a1a28abd8418b484e/html5/thumbnails/1.jpg)
.NET Database Technologies
ORM Roundup
![Page 2: NET Database Technologies](https://reader034.vdocuments.us/reader034/viewer/2022051404/5876086a1a28abd8418b484e/html5/thumbnails/2.jpg)
Alternatives to Entity Framework
l Wide range of ORMs for .NET are available l Range in scope and approach l Open source and commercial l Some have included or 3rd party tool support l From full-featured mappers to simpler “micro-
ORMs” l Look at some examples and relate these to
data access patterns
9. ORM roundup 2
![Page 3: NET Database Technologies](https://reader034.vdocuments.us/reader034/viewer/2022051404/5876086a1a28abd8418b484e/html5/thumbnails/3.jpg)
Full featured ORMs l Implement Data Mapper pattern, and other
patterns such as Unit of Work, Identity Map, Metadata Mapping, etc.
l Examples: l NHibernate l Telerik OpenAccess l DataObjects.NET l LLBL Gen Pro l LightSpeed l EntitySpaces
ORM roundup 3
![Page 4: NET Database Technologies](https://reader034.vdocuments.us/reader034/viewer/2022051404/5876086a1a28abd8418b484e/html5/thumbnails/4.jpg)
NHibernate
l Relatively mature technology (~2005) l Ported from Hibernate ORM for Java which
was released originally in 2001 l Powerful and flexible, though regarded as
relatively difficult to learn l Supported by 3rd party design tools such as
LLBL Gen Pro l Brief overview and some comparisons with EF
follow here
![Page 5: NET Database Technologies](https://reader034.vdocuments.us/reader034/viewer/2022051404/5876086a1a28abd8418b484e/html5/thumbnails/5.jpg)
Unit of Work l Session is roughly equivalent to EF DbContext l Implements Unit of Work and Identity Map
patterns l Session instance is created by a Session
Factory object built by reading a configuration l Session opens a Transaction in which to do
the work l Common practice to wrap Session in a custom
Unit of Work at a higher level of abstraction
![Page 6: NET Database Technologies](https://reader034.vdocuments.us/reader034/viewer/2022051404/5876086a1a28abd8418b484e/html5/thumbnails/6.jpg)
Unit of Work
l SessionFactory expensive to create, Session inexpensive
l In web applications, create SessionFactory when application starts, Session created per-request
l With dependency injection, SessionFactory scope is singleton, defining how object is configured in DI initialisation (see example with StructureMap in references)
ORM roundup 6
![Page 7: NET Database Technologies](https://reader034.vdocuments.us/reader034/viewer/2022051404/5876086a1a28abd8418b484e/html5/thumbnails/7.jpg)
Metadata Mapping
l Mappings are defined in XML files, by annotations or by fluent mapping (Fluent NHibernate)
l Very powerful and flexible mapping capabilities
l Detailed control of loading strategies, etc. l Can map select, update, etc to stored queries l Configuration (database connection, etc) also
defined in XML files or fluently
![Page 8: NET Database Technologies](https://reader034.vdocuments.us/reader034/viewer/2022051404/5876086a1a28abd8418b484e/html5/thumbnails/8.jpg)
Fluent configuration and mapping
ORM roundup 8
![Page 9: NET Database Technologies](https://reader034.vdocuments.us/reader034/viewer/2022051404/5876086a1a28abd8418b484e/html5/thumbnails/9.jpg)
NHibernate queries
l NHibernate can retrieve data and populate objects in the following ways: l HQL queries l Criteria queries (Query Object pattern) l Native SQL queries l LINQ l Named queries (HQL or SQL) defined in mapping l Stored procedures
![Page 10: NET Database Technologies](https://reader034.vdocuments.us/reader034/viewer/2022051404/5876086a1a28abd8418b484e/html5/thumbnails/10.jpg)
NHibernate query examples
ORM roundup 10
get by PK
HQL
SQL
Criteria
LINQ
![Page 11: NET Database Technologies](https://reader034.vdocuments.us/reader034/viewer/2022051404/5876086a1a28abd8418b484e/html5/thumbnails/11.jpg)
Lazy loading and fetching
l Lazy loading enabled by default, uses proxies
l If disabled, NHibernate eager loads related objects
l Different behaviour from EF which doesn’t load related objects
l Can control SQL used for loading in mapping with Fetch/Join options
l Default is select for each loaded property ORM roundup
11
![Page 12: NET Database Technologies](https://reader034.vdocuments.us/reader034/viewer/2022051404/5876086a1a28abd8418b484e/html5/thumbnails/12.jpg)
Lazy loading and fetching
l Generally best to leave lazy loading on and override fetch behaviour in queries
ORM roundup 12
EmployeeMap - LL on (same as default)
EmployeeMap - LL off, associated Address object will be eager loaded with single SELECT/JOIN
Fetch (not Include) in LINQ overrides default LL for this query
see nhibernate_loading.txt in sample code
![Page 13: NET Database Technologies](https://reader034.vdocuments.us/reader034/viewer/2022051404/5876086a1a28abd8418b484e/html5/thumbnails/13.jpg)
FK properties
l NHibernate does not expect your POCOs to include FK properties
l Doesn’t allow a field to be mapped as a property and a key
l In scenario when you want to save a new object associated with an existing object without materialising that object, use Session.Load
l Creates a proxy object, does not hit database
ORM roundup 13
![Page 14: NET Database Technologies](https://reader034.vdocuments.us/reader034/viewer/2022051404/5876086a1a28abd8418b484e/html5/thumbnails/14.jpg)
Load example
ORM roundup 14
creates proxy, object properties would only be retrieved from db if accessed, which they are not in this case
Can also use Load in queries (HQL here)
![Page 15: NET Database Technologies](https://reader034.vdocuments.us/reader034/viewer/2022051404/5876086a1a28abd8418b484e/html5/thumbnails/15.jpg)
NHibernate key generation
l Unlike EF, NHibernate supports a range of algorithms for generating Ids in addition to using Identity columns
l HiLo l UUID hex l UUID string l GUID l Application-assigned
ORM roundup 15
![Page 16: NET Database Technologies](https://reader034.vdocuments.us/reader034/viewer/2022051404/5876086a1a28abd8418b484e/html5/thumbnails/16.jpg)
NHibernate caching
l 1st level cache l Per-session (Unit of Work) l Similar to EF
l 2nd level cache l Associated with SessionFactory, not session, can
be shared by many sessions l Requires a cache provider, e.g. Velocity,
Memcached, ASP.NET caching l No equivalent capability built into EF (but see
references for example implementation) ORM roundup
16
![Page 17: NET Database Technologies](https://reader034.vdocuments.us/reader034/viewer/2022051404/5876086a1a28abd8418b484e/html5/thumbnails/17.jpg)
Active Record l An object that wraps a row in a database
table or view, encapsulates the database access, and adds domain logic on that data
l Examples: l Castle ActiveRecord l Subsonic
l No “live” .NET AR projects, but pattern still popular elsewhere, e.g. Ruby
l Coupling of data and domain logic is an issue for testability
l
![Page 18: NET Database Technologies](https://reader034.vdocuments.us/reader034/viewer/2022051404/5876086a1a28abd8418b484e/html5/thumbnails/18.jpg)
Castle ActiveRecord
l Part of Castle Project, which also includes Windsor, Dynamic Proxy, etc.
l Built on top of NHibernate l Provides a simpler way to use NHibernate l Still available but now an “archived” project l Look at it here just to illustrate the pattern
ORM roundup 18
![Page 19: NET Database Technologies](https://reader034.vdocuments.us/reader034/viewer/2022051404/5876086a1a28abd8418b484e/html5/thumbnails/19.jpg)
ActiveRecordBase
l Active record pattern l instance properties representing a record in the
database l instance methods acting on that specific record l static methods acting on all records
l ActiveRecord implements this through ActiveRecordBase class
l All persistent classes inherit from it
![Page 20: NET Database Technologies](https://reader034.vdocuments.us/reader034/viewer/2022051404/5876086a1a28abd8418b484e/html5/thumbnails/20.jpg)
ActiveRecordBase l Provides a basic set of storage and retrieval operations l Persistent classes can implement additional operations
ORM roundup 20
![Page 21: NET Database Technologies](https://reader034.vdocuments.us/reader034/viewer/2022051404/5876086a1a28abd8418b484e/html5/thumbnails/21.jpg)
ActiveRecord queries
l Persistent classes can retrieve data and populate objects in the following ways: l Calling methods of base class l Calling methods of base class and use
NHibernate criteria l Using SimpleQuery class to execute HQL queries
(Hibernate Query Language) l Native SQL queries (through NHibernate)
![Page 22: NET Database Technologies](https://reader034.vdocuments.us/reader034/viewer/2022051404/5876086a1a28abd8418b484e/html5/thumbnails/22.jpg)
Micro ORMs
l Simpler tools which do not offer the full range of functionality of full-featured ORMs l Don’t implement Unit of Work, etc.
l Also don’t have the associated overheads and offer better performance
l Balance this against the need to do more work in your code in complex scenarios
l Examples: l Dapper, PetaPoco, Massive, Simple.Data
ORM roundup 22
![Page 23: NET Database Technologies](https://reader034.vdocuments.us/reader034/viewer/2022051404/5876086a1a28abd8418b484e/html5/thumbnails/23.jpg)
Table Data Gateway
l Micro ORMs adhere to the basic intent, if not the specifics, of this pattern
l An object that acts as a Gateway to a database table. One instance handles all the rows in the table
l There is an expectation here that the application objects will be closely aligned with the database structure
ORM roundup 23
![Page 24: NET Database Technologies](https://reader034.vdocuments.us/reader034/viewer/2022051404/5876086a1a28abd8418b484e/html5/thumbnails/24.jpg)
Queries and objects
l Essentially the job these do is to send queries to the database and use the results to instantiate application objects
l Queries are in many cases SQL strings l Application objects are POCOs or dynamic
types, e.g. (Dapper)
ORM roundup 24
Product is POCO, but could instead create dynamic type with Query<dynamic>
![Page 25: NET Database Technologies](https://reader034.vdocuments.us/reader034/viewer/2022051404/5876086a1a28abd8418b484e/html5/thumbnails/25.jpg)
Queries and objects
l Simple.Data fairly literally implements Table Data Gateway
l Provides “gateway” methods which cause SQL to be generated
ORM roundup 25
gateway
results retrieved as POCOs or dynamic types
![Page 26: NET Database Technologies](https://reader034.vdocuments.us/reader034/viewer/2022051404/5876086a1a28abd8418b484e/html5/thumbnails/26.jpg)
References l http://en.wikipedia.org/wiki/List_of_object-
relational_mapping_software#.NET l http://lostechies.com/jimmybogard/2012/07/20/choosing-
an-orm-strategy/ l http://blog.pluralsight.com/2012/04/18/and-the-winner-is-
our-net-orm-poll-results/ l http://nhibernate.hibernatingrhinos.com/28/first-and-
second-level-caching-in-nhibernate l http://msdn.microsoft.com/en-us/magazine/
hh394143.aspx l http://angrywelshcoder.blogspot.co.uk/2011/03/
nhibernate-unit-of-work-repository-and.html ORM roundup
26