SQL Without the Hassle

Combine the type safety of LINQ mappers like Entity Framework with the versatility and performance of SQL mappers like Dapper through elegant Razor syntax.

Optimized Payloads for All Your Data

Never call your database twice! Minimize load with batched commands and multiset queries — all in a single roundtrip.

Deep Object Graphs with Ease

Send a single SQL query and eagerly load all of your data. Support for creating object graphs from multiple data sets with any combination of one-to-one, one-to-many, many-to-one, many-to-many and self-joins.

Everything in Bulk

Easily batch any type of DML in a single SQL command through the use of @foreach expressions. Update your model from server-generated identities, sequences, computed values, etc.

Razor Extensions for 100% Type-safe SQL

Use our powerful suite of Razor extensions to generate all common SQL snippets from your model. Catch errors early and participate in code refactorings through static typing.

Create-Read-Update-Delete

Get started quickly by mapping directly to your database model with single-file CRUD templates. Use the Star and Tbl extensions to easily generate mappings for all columns of a specific table.

Projections

Project mappings into a domain model specifically designed for your query. Use the common Col() AS Prop() syntax to map only the values your need.

Parameters

Filter and modify data with injection-safe parameters and literals from the Par and Lit methods. Match multiple rows with the IN keyword and ParList or LitList.

Conditionals

Never send unnecessary data to the server by conditionally excluding non-relevant SQL code with simple @if expressions.

Partials

Combine multiple pieces of SQL code with ASP.NET-like partials. Use the Subquery and Subcommand to reuse your existing cssql files.

JSON

Store JSON in your database and automatically handle serialization and deserialization with our official JSON extensions. Use the Json method to query JSON properties directly on the server.

Procedural Elements

Use procedural SQL (if available) to transfer intermediate results between parameters for complex scenarios such as nested identity inserts.

Table-Valued Parameters (SQL Server only)

Use table-valued parameters and send entire tabular structures to the server with ease. Use the Tvp and TvpName and reference your TVPs in the same way you do regular tables.

Familiar Design for You and Your Team

Follow the Model-View-Controller (MVC) pattern to design data access layers that are easy to maintain and collaborate on.

Model

Generate and design your object model with simple POCO-like classes.

View (Procedure)

Write SQL for commands and queries (CQS) with our powerful Razor interface.

Controller (Accessor)

Bridge your model and your Razor code with a clear-cut interface.

Domain

Configure all operations from one or more centralized domains.

High-Level Architecture Overview

Scalable Performance at Any Depth

Jerrycurl tries to hit the sweet spot in regards to performance without compromising any features.
Consult the charts below for real world benchmark results.

Graph Fetches

Set Fetches

Batch Inserts

Async Graph Fetches

Individual Fetches

Full benchmark results are available here.