OrmLite's goal is to provide a convenient, DRY, config-free, RDBMS-agnostic typed wrapper that retains a high affinity with SQL, exposing intuitive APIs that generate predictable SQL and maps cleanly to disconnected and Data Transfer Object (DTO) friendly, Plain Old C# Objects (POCOs). This approach makes easier to reason-about your data access making it obvious what SQL is getting executed at what time, whilst mitigating unexpected behavior, implicit N+1 queries and leaky data access prevalent in Heavy Object Relational Mappers (ORMs).
OrmLite was designed with a focus on the core objectives:
- Provide a set of light-weight C# extension methods around .NET's impl-agnostic
- Map a POCO class 1:1 to an RDBMS table, cleanly by conventions, without any attributes required.
- Create/Drop DB Table schemas using nothing but POCO class definitions
- Simplicity - typed, wrist friendly API for common data access patterns.
- High performance - with support for indexes, text blobs, etc.
- Amongst the fastest Micro ORMs for .NET.
- Expressive power and flexibility - with access to
IDbCommandand raw SQL
- Cross-platform - supports multiple dbs (currently: Sql Server, Sqlite, MySql, PostgreSQL, Firebird) running on both .NET Framework and .NET Core platforms.
In OrmLite: 1 Class = 1 Table. There should be no surprising or hidden behaviour, the Typed API that produces the Query doesn't impact how results get intuitively mapped to the returned POCO's which could be different to the POCO used to create the query, e.g. containing only a subset of the fields you want populated.
Any non-scalar properties (i.e. complex types) are text blobbed by default in a schema-less text field using any of the available pluggable text serializers. Support for POCO-friendly references is also available to provide a convenient API to persist related models. Effectively this allows you to create a table from any POCO type, and it should persist as expected in a DB Table with columns for each of the classes 1st level public properties.
- OrmLite and Redis: New alternatives for handling db communication by @abtosoftware
- Object Serialization as Step Towards Normalization by @ 82unpluggd
- Code Generation using ServiceStack.OrmLite and T4 Text templates by @jokecamp
- Simple ServiceStack OrmLite Example by @robrtc
- OrmLite Blobbing done with NHibernate and Serialized JSON by @philliphaydon
- Creating An ASP.NET MVC Blog With ServiceStack.OrmLite by @peterbromberg
If you know of an article/blog post about ServiceStack.OrmLite that is missing, let us know over on the ServiceStack GitHub Discussions, and we will be sure to include it here.
Other notable Micro ORMs for .NET
Many performance problems can be mitigated and a lot of use-cases can be simplified without the use of a heavyweight ORM, and their config, mappings and infrastructure. We can recommend the following list, each with their own unique special blend of features.
- Dapper - by @samsaffron and @marcgravell
- Current performance king, supports both POCO and dynamic access, fits in a single class. Used to solve StackOverflow's Perf issues
- PetaPoco - by @toptensoftware
- Fast, supports dynamics, expandos and typed POCOs, fits in a single class. Includes optional T4 templates for POCO table generation
- Massive - by @robconery
- Fast, supports dynamics and expandos, smart use of optional params for a wrist-friendly api, fits in a single class. Multi RDBMS
- Simple.Data - by @markrendle
- A little slower than above ORMS, most wrist-friendly courtesy of a dynamic API, multiple RDBMS support inc. Mongo DB