TinyORM by Stan Drapkin [sdrapkin at sdprime dot com]
- Focused on SQL Server (any
SqlClient
-based db engine). Azure SQL is supported as well. - Intuitive, tiny, simple API. This is usually the hardest part for libraries to get right.
- Does not obscure or reinvent
T-SQL
. If you prefer APIs that hideT-SQL
incompetence, look elsewhere. - Very fast. As fast as competition (
Dapper
,OrmLite
,LLBLGen
,EF Core
, etc. benchmarks). - Seamlessly transactional and safe. Transactions are not merely supported - they are the default.
XACT_ABORT=ON
(automatic transaction rollback on runtime T-SQL errors).- Custom transaction scopes are declared via standard
TransactionScope
instance (created viaTinyORM
.DbContext
.CreateTransactionScope()
factory).
- Transparent connection management. One less thing to worry about and screw up. Never think about connections again.
Task
-basedasync
API (ie. the API). All calls are buffered (focus on safety and fast connection release).- POCOs or
anonymous
objects are fine. No inheritance, interface, or attribute requirements. - Returns
dynamic
entities which can be consumed directly, or projected to statically-typed objects (fast!).- Either strict (perfect-match) or relaxed (best-effort) projection of
dynamic
to statically-typed objects.
- Either strict (perfect-match) or relaxed (best-effort) projection of
- Full parameterization, with parameter list expansion (ex.
WHERE Id IN (@IdList)
). This also helps prevent SQL injection.CHAR
,VARCHAR
,NCHAR
,NVARCHAR
support forstring
parameters.
- Single or multiple Result Sets.
- Snapshots provide change-tracking, with
UPDATE
T-SQL
generation for partial updates. - Intelligent batched *bulk* command sequences via
QueryBatch
(not just forINSERT
- for allCREATE/UPDATE/DELETE/MERGE
commands). - Streaming data-out support (ex. streaming out
BLOBs
/files). - Auditing
- Caller identity tracking (which user made the call?).
- Callsite tracking (which source code filename, method, and line# made the call?).
- Helpers for
CREATE
,UPDATE
,DELETE
, andUPSERT
T-SQL
generation. SequentialGuid
generator for fragmentation-free, unique, unguessable, code-generated clustereduniqueidentifier
indexes.- c# 10.0 in
safe
mode. Compiledany cpu
for .NET 4.5.2+ and NetStandard 2.0/.NET Core 2.0+. - Tiny codebase. Tiny ~45k
.dll
. TinyORM
on NuGet (Install-Package TinyORM
).- MS-PL (Microsoft Public) license. If MS-PL does not suit you, contact me.
If you are serious about SQL Server, give TinyORM a try (even if you're a Dapper
fan).
var db = DbContext.Create(connString);
var query = await db.QueryAsync("select [Answer] = @a + @b", new { @a = 123, @b = 2 });
Console.WriteLine(query.First().Answer); // prints "125"
static string connString = "Data Source=.\\SQL2012; Initial Catalog=tempdb; Integrated Security=True;";