Fact-checked by Grok 2 weeks ago

Dapper ORM

Dapper is a lightweight, open-source micro-object relational mapper (micro-ORM) for the .NET platform, designed to extend connections with simple extension methods that enable efficient execution of SQL queries and mapping of results to .NET objects without the overhead of full-fledged ORMs. Originally developed in by developers Sam Saffron and Marc Gravell to address performance bottlenecks in high-volume data access scenarios at , Dapper emphasizes speed and minimalism, executing queries up to twice as fast as alternatives like to SQL while requiring fewer than 500 lines of code in its core implementation. Key features of Dapper include support for parameterized queries to prevent , multi-mapping for joining related objects, handling of multiple result sets from a single query, and both synchronous and asynchronous operations, all while maintaining compatibility with any ADO.NET provider such as , , , , and . It operates by adding methods like Query, Execute, and QuerySingle directly to IDbConnection instances, allowing developers to write raw SQL while automating the boilerplate of reading data readers and populating objects, including support for dynamic objects and strongly typed lists. Unlike traditional ORMs, Dapper does not generate SQL or handle object-relational impedance mismatch automatically, instead focusing on high-performance materialization of query results through caching mechanisms like ConcurrentDictionary for type mappings. Since its initial release under the Apache 2.0 license on Google Code and subsequent migration to under the DapperLib organization, Dapper has become a popular choice for .NET applications requiring fast, lightweight data access, with ongoing maintenance by a of contributors and integration via for .NET Framework, .NET Core, and .NET 5+. Its benchmarks demonstrate exceptional efficiency, such as completing cached execute operations in approximately 96.75 microseconds, making it suitable for scenarios where raw SQL control is preferred over entity-based abstractions.

Introduction

Overview

Dapper is a lightweight object-relational mapper (micro-ORM) for the .NET ecosystem, designed to simplify data access by extending the IDbConnection interface with convenient extension methods for executing SQL queries and mapping results to objects. This approach enables developers to write raw SQL while automating the tedious aspects of parameter handling, result materialization, and type mapping, without imposing heavy abstractions or change-tracking overhead found in full-featured ORMs. At its core, Dapper adheres to a of , prioritizing developer control over SQL statements to ensure transparency, predictability, and performance in database interactions. By focusing on the common 95% of data access scenarios, it reduces —such as manual IDataReader iteration and object population—while allowing fine-grained customization for complex queries. This balance makes it particularly suitable for applications where speed and SQL familiarity are paramount. Dapper supports a wide range of .NET runtimes, including .NET Framework, .NET Core, and .NET 5+, with cross-platform capabilities (enabling use on Windows, , and macOS) added in version 1.50, released on July 1, 2016. It is compatible with major ADO.NET providers like , , , and , ensuring broad database versatility. Distributed as under the 2.0, Dapper is maintained by the DapperLib organization on , where its source code, issues, and contributions are publicly accessible.

Purpose and Benefits

Dapper ORM serves as a micro-ORM designed to enhance by providing lightweight, efficient data access for .NET applications, allowing developers to execute raw SQL queries while automatically results to strongly-typed objects. Its primary is to bridge the gap between low-level operations and higher-level object without the overhead of full-featured ORMs, enabling full control over SQL statements to optimize performance in scenarios where query customization is essential. The key benefits of Dapper include its high performance with minimal overhead, achieved through direct SQL execution and efficient result hydration, which often rivals or exceeds the speed of hand-coded while reducing the verbosity associated with manual DataReader handling. It supports parameterized queries natively, helping to prevent attacks and ensuring secure data access. This simplicity makes it particularly advantageous for read-heavy operations or basic CRUD tasks, where developers can hydrate objects quickly from query results without complex configuration. Dapper excels in target use cases such as high-throughput applications, including web APIs and , where avoiding the complexity and abstraction layers of full ORMs like is beneficial for maintaining speed and control. As a deliberate design choice to prioritize performance, it omits features like built-in change tracking, database migrations, and LINQ-based querying, requiring manual implementation for such needs and making it less suitable for applications demanding extensive entity management. In comparison to heavier ORMs, Dapper offers a leaner alternative for SQL-centric workflows.

History

Development Origins

Dapper ORM was developed in 2011 by Sam Saffron and Marc Gravell as an internal tool at , a high-traffic question-and-answer platform handling millions of user interactions daily. The project originated from the need to optimize database operations amid growing scale, where existing object-relational mapping solutions proved inadequate for the site's demanding workload. The primary motivations stemmed from performance bottlenecks encountered with to SQL, the previously used extensively at , which incurred significant overhead in query execution and object materialization, leading to elevated CPU usage during peak loads. Saffron and Gravell sought a lightweight alternative that minimized abstraction layers while preserving explicit SQL control, allowing developers to write raw queries but automating the mapping to .NET objects via extensions to IDbConnection. This approach addressed the engineering challenges of scaling queries for , such as retrieving related posts and tags, without the bloat of full-featured ORMs like . Initially conceived as a micro-ORM focused on raw speed, Dapper emerged directly from Stack Overflow's real-world constraints, where even minor inefficiencies in data access could amplify costs and latency in a system processing billions of page views annually. By prioritizing efficient parameterization and simple data processing, it provided up to twice the performance of to SQL in early benchmarks on common read-heavy operations.

Release and Evolution

Dapper was open-sourced on April 14, 2011, initially on Google Code, and later migrated to under the StackExchange organization before being transferred to the independent DapperLib organization. The project was initially hosted on Google Code and later moved to under the StackExchange organization before being transferred to the independent DapperLib organization, where it rapidly gained popularity within the .NET developer community for its lightweight approach to data access. A significant milestone occurred with the release of version 1.50 on July 1, 2016, which introduced support for .NET Core, enabling broader cross-platform compatibility and aligning with Microsoft's shift toward open-source .NET frameworks. Subsequent versions under the have focused on enhancements such as improved asynchronous operations and resolutions to various bugs, with the latest stable release, version 2.1.66, issued in February 2025. Originally developed as a proprietary tool by the team, Dapper transitioned to a fully community-driven project, now maintained through contributions on and supported by sponsorships from entities like Dapper Plus. By late 2025, the project had achieved over 350 million downloads via , underscoring its widespread adoption in .NET ecosystems. Ongoing maintenance is robust, featuring an active development cycle with a comprehensive test suite that includes support for databases like , SQL Server, and , and contributions from a global pool of developers who regularly submit pull requests and participate in issue resolution.

Technical Features

Core Mechanisms

Dapper ORM enhances the ADO.NET IDbConnection interface through a set of extension methods, allowing developers to execute SQL queries and commands directly on database connections without replacing the underlying ADO.NET infrastructure. Key methods include Query<T>, which executes a query and maps results to a strongly-typed collection of objects; Execute, which runs non-query commands like INSERT, UPDATE, or DELETE and returns the number of affected rows; and QueryMultiple, which handles multiple result sets from a single SQL execution. These extensions integrate seamlessly with existing ADO.NET connections, such as SqlConnection, enabling lightweight ORM functionality atop standard database access patterns. Parameter handling in Dapper supports flexible input mechanisms to prevent while accommodating various data scenarios. Developers can pass parameters using anonymous objects, where properties are automatically mapped to SQL placeholders (e.g., @paramName), or plain objects (POCOs) for more structured data. For advanced cases like stored procedures requiring output or return values, Dapper utilizes the DynamicParameters , which allows explicit addition of parameters with specified directions (input, output, or return) and data types. For instance, an output parameter can be retrieved post-execution via dynamicParams.Get<T>("@OutputParam"), ensuring safe and efficient handling of procedural database interactions. The query execution flow in Dapper begins with an IDbConnection instance, which it automatically opens if closed before executing the SQL command via an underlying IDbCommand. Upon execution, Dapper reads the results from the IDataReader and maps them to the specified type—either strongly-typed objects using property name matching to column names or dynamic objects for flexible schemas—before closing the reader and, if it opened the connection, closing it as well to maintain hygiene. This minimizes while preserving control over transactions and connection lifetimes when needed. Dapper provides options for buffered and streaming result handling to balance performance and usage, particularly for large datasets. By default, queries are buffered, loading the entire result set into to allow immediate disposal of the database reader and reduce hold times, which is suitable for most scenarios. For -intensive operations, such as retrieving vast result sets, the buffered: false option enables streaming, where results are yielded iteratively without full materialization, though this requires careful management to avoid prolonged locks.

Mapping Capabilities

Dapper's mapping capabilities enable the transformation of raw database query results from an IDataReader into .NET objects, emphasizing simplicity and performance through automatic property matching. In simple mapping, Dapper populates Plain Old CLR Objects () by matching column names from the query results to property names on the target type, supporting case-insensitive comparisons and common conventions like camelCase or PascalCase. This process occurs via extension methods such as Query<T>, where the generic type T defines the POCO structure, and Dapper constructs instances by setting properties directly from the reader data. For instance, a SQL query selecting columns "Name" and "Age" will map to a POCO with properties Name (string) and Age (int), ignoring any unmapped columns (leaving corresponding properties at their default values). This approach minimizes configuration overhead while ensuring efficient, low-level data binding without the need for XML or fluent mappings found in heavier ORMs. For cases where column names do not align with property names, such as legacy database schemas, Dapper provides custom mapping through SqlMapper.SetTypeMap. This method allows registration of an IMemberMap for a specific type, defining explicit mappings from ordinal positions or column names in the IDataReader to properties. Developers can implement a custom TypeMap class to handle these discrepancies globally or per-type, enabling support for prefixed columns (e.g., mapping "USR_Name" to "Name") or complex deserialization logic. Once set, this configuration applies to all subsequent queries involving the mapped type, offering flexibility without altering the underlying SQL. An example usage involves creating a CustomPropertyTypeMap that uses to resolve mappings based on attributes or conventions, for example, SqlMapper.SetTypeMap(typeof(MyPoco), new CustomPropertyTypeMap(typeof(MyPoco), (type, columnName) => type.GetProperties().FirstOrDefault(prop => prop.Name.StartsWith(columnName))));. Dynamic mapping addresses scenarios with variable or unknown schemas, returning results as ExpandoObject or IDictionary<string, object> via non-generic Query methods. This produces dynamic objects where properties correspond directly to column names, allowing schema-agnostic processing such as in reporting tools or ad-hoc queries. For example, connection.Query("SELECT * FROM Table") yields a collection of dynamic or IDictionary instances, with values accessible via key lookup, providing runtime flexibility at the cost of compile-time safety. Dapper's type handling ensures robust support for common .NET types during mapping. Enums are deserialized from their underlying numeric values or string representations if configured, with built-in parsers handling conversions seamlessly. Nullable types, such as int? or DateTime?, are populated only if data is present in the reader, avoiding reference issues in POCOs. For advanced needs, custom type handlers can be registered using SqlMapper.AddTypeHandler, implementing SqlMapper.ITypeHandler<T> to control and deserialization for non-primitive types like spatial data or strings. A built-in example is DbString, a handler for ANSI/ parameters that specifies length and fixed flags. These handlers integrate directly into the mapping pipeline, applying to both input parameters and output population without performance degradation.

Usage and Implementation

Installation and Setup

Dapper is installed as a package in .NET projects, supporting .NET Standard 2.0 and later versions, including .NET Framework 4.6.1, .NET 5.0+, and .NET 8.0. To add Dapper using the Package Manager Console in , execute the command Install-Package Dapper. Alternatively, for .NET CLI projects, use dotnet add package Dapper. For signed assemblies, opt for Install-Package Dapper.StrongName instead. Dapper extends ADO.NET functionality and thus requires database-specific ADO.NET providers, such as Microsoft.Data.SqlClient for SQL Server (recommended over the deprecated System.Data.SqlClient), MySql.Data for MySQL, or Npgsql for PostgreSQL; these must be installed separately via NuGet if not already present. No additional runtime configuration or setup is required beyond establishing a valid database connection. In a project, import the Dapper namespace with using Dapper; at the top of C# files where it will be used. Connection strings are configured conventionally for the application, such as in appsettings.json for projects, loaded via IConfiguration for injection into services. As of November 2025, the latest stable version is 2.1.66 (released February 2025), which addresses issues with DateOnly/TimeOnly support by reverting problematic changes; it is recommended to use this version or later to benefit from ongoing fixes and compatibility with modern .NET runtimes.

Basic Querying and Execution

Dapper's core querying functionality revolves around the Query method, which executes a SQL SELECT statement and maps the results to strongly-typed objects or dynamic types. This method returns an IEnumerable<T> for multi-row results, allowing developers to retrieve lists of entities directly from parameterized queries. For instance, to fetch users from a database table, one can use the following code:
using (var connection = new SqlConnection(connectionString))
{
    var results = connection.Query<User>("SELECT * FROM Users WHERE Id = @id", new { id = 1 });
    var user = results.FirstOrDefault();
}
This approach leverages anonymous objects for parameter passing, ensuring safe SQL execution without manual command construction. For non-query operations such as INSERT, , or DELETE, Dapper provides the Execute method, which runs the SQL command and returns the number of affected rows as an integer. This is particularly useful for data modification tasks where result mapping is not required. A typical insertion example is:
csharp
using (var connection = new SqlConnection(connectionString))
{
    int rows = connection.Execute("INSERT INTO Users (Name) VALUES (@name)", new { name = "John" });
}
Bulk operations are supported by passing an IEnumerable of parameter objects, enabling efficient multi-row inserts in a single call. To handle asynchronous operations and improve scalability in high-throughput applications, Dapper offers async variants like QueryAsync<T> and ExecuteAsync. These methods return Task<IEnumerable<T>> and Task<int>, respectively, facilitating non-blocking I/O. An async query example mirrors the synchronous version but uses await:
csharp
using (var connection = new SqlConnection(connectionString))
{
    await connection.OpenAsync();
    var results = await connection.QueryAsync<User>("SELECT * FROM Users WHERE Id = @id", new { id = 1 });
}
Similarly, ExecuteAsync supports async inserts and updates. Connection management in Dapper is streamlined through ADO.NET integration, where the library implicitly opens a closed connection before execution and closes it afterward, eliminating the need for explicit Open or Close calls in most scenarios. Best practices recommend wrapping operations in using statements to ensure proper disposal, as shown in the examples above, which automatically handles resource cleanup even if exceptions occur. This implicit behavior reduces boilerplate code while maintaining reliability.

Advanced Topics

Multi-Mapping and Stored Procedures

Dapper's multi-mapping feature enables the mapping of a single database row to multiple related objects, facilitating the handling of complex relational data without additional queries. This is particularly useful for one-to-one or one-to-many relationships, where a join query returns flattened results that need to be split across object instances. For instance, in a query joining a Post table with a User table, Dapper can populate both a Post object and its associated User owner from each row, using a split point to delineate property boundaries. The syntax for multi-mapping involves the Query method with a tuple or multiple type parameters, along with a mapping function to link the objects. A representative example is:
csharp
var sql = "SELECT p.*, u.* FROM Posts p LEFT JOIN Users u ON u.Id = p.OwnerId";
var data = connection.Query<Post, User, Post>(sql, (post, user) => { post.Owner = user; return post; }, splitOn: "Id");
Here, splitOn specifies the column (defaulting to "Id") where Dapper divides the row's columns between the Post and User objects, ensuring efficient eager loading of related data. Dapper provides robust support for executing s, treating them as parameterized commands to maintain and . s that return result sets are invoked via the Query method, while those without results use Execute. Parameters are passed as anonymous objects or DynamicParameters instances, with the commandType explicitly set to CommandType.StoredProcedure. An example for retrieving a via a is:
csharp
var [user](/page/User) = connection.Query<[User](/page/User)>("spGetUser", new { Id = 1 }, commandType: CommandType.StoredProcedure).SingleOrDefault();
This approach supports output parameters as well, by configuring direction in DynamicParameters, allowing retrieval of values like procedure-generated IDs or status flags post-execution. For scenarios involving multiple result sets, such as a stored procedure returning both a summary and detailed records, Dapper's QueryMultiple method returns a GridReader to sequentially consume each grid without buffering the entire dataset into memory. This streaming capability is ideal for large datasets or procedures yielding heterogeneous outputs. A typical usage pattern is:
csharp
using var multi = connection.QueryMultiple("spGetCustomerData", new { Id = selectedId }, commandType: CommandType.StoredProcedure);
var customer = multi.Read<Customer>().Single();
var orders = multi.Read<Order>().ToList();
The Read<T> calls map each subsequent result set to the specified type, enabling efficient processing of multi-grid responses from a single database round-trip. Dapper supports SQL Server table-valued parameters (TVPs) through custom parameter handling, allowing entire tables of data to be passed to stored procedures as structured inputs. This requires creating SqlDataRecord instances populated with data and adding them as structured parameters via DynamicParameters. For example, to pass a list of order IDs:
csharp
var tvpParam = new DataTable { Columns.Add("OrderId", typeof(int)) };
orderIds.ForEach(id => tvpParam.Rows.Add(id));
var p = new DynamicParameters();
p.Add("@OrderIds", tvpParam.AsTableValuedParameter("[dbo].[OrderIdTableType]"));
connection.Query("spProcessOrders", p, commandType: CommandType.StoredProcedure);
TVPs enhance bulk operations by reducing network overhead compared to multiple scalar parameters, and Dapper integrates them seamlessly for SQL Server environments.

Performance Optimization

Dapper's performance optimizations are designed to minimize overhead in data access operations, making it suitable for high-volume applications. A primary mechanism is its compiled query caching, implemented using a ConcurrentDictionary to store query , parsers, and materialization plans. This caching enables sub-millisecond execution for repeated queries by avoiding recompilation, while single-use queries are automatically evicted to prevent bloat. Benchmarks demonstrate that cached operations, such as parameterized executions, average approximately 96 microseconds, compared to over 600 microseconds for uncached equivalents. To handle concurrency in I/O-bound scenarios, Dapper fully integrates with .NET's async/await model through extension methods on IDbConnection instances, such as QueryAsync<T> and ExecuteAsync. This allows non-blocking database calls, reducing contention in applications and improving scalability under load. For processing large result sets efficiently, Dapper supports non-buffered querying by specifying buffered: false in methods like Query<T>. This streams results row-by-row via an IDataReader, enabling iterative processing without loading the entire dataset into memory, which is essential for memory-constrained environments or retrievals. Developers can further enhance performance by reusing parameters through anonymous objects or DynamicParameters for safe, efficient query parameterization, which avoids string concatenation overhead. Dapper also benefits from ADO.NET's automatic connection pooling, where connections are reused from a pool rather than recreated per operation, minimizing establishment . To avoid unnecessary overhead, precise SQL crafting reduces complexity, and Dapper's internal caching of learned object mappings accelerates deserialization in subsequent executions.

Comparisons and Alternatives

Versus Full ORMs like

Dapper, as a micro-ORM, emphasizes direct SQL execution with minimal abstraction, enabling higher performance for simple queries compared to full ORMs like (EF), which introduce overhead through features such as query translation and object-relational mapping. In certain scenarios, historical benchmarks show Dapper achieving up to 5-10x faster execution times for raw query operations, as it avoids the computational cost of LINQ-to-SQL translation and automatic change tracking present in EF. However, as of 2025, EF Core has significantly narrowed this gap through optimizations like compiled queries and improved caching, with recent benchmarks in .NET 9 showing minimal differences (e.g., 5.643 ms for Dapper vs. 5.862 ms for EF Core in select operations). Dapper lacks EF's built-in support for querying, database migrations, and automatic change tracking, requiring developers to manage these aspects manually via custom SQL or additional tools. In performance-critical scenarios, such as read-heavy applications or high-throughput , Dapper remains preferable for teams proficient in SQL, as it allows fine-tuned queries without ORM-induced ; for instance, in tests fetching 100 records, Dapper processed them in approximately 1.01 ms, compared to EF's 3.57 ms, equating to roughly 99,000 rows per second versus 28,000 rows per second. Conversely, in a for selecting entities by ID, Dapper took 7.75 µs versus EF Core's 41.6 µs (compiled query). EF suits and complex domain models where abstractions like and migrations accelerate and reduce , though this comes at the expense of manual SQL maintenance in Dapper, which can increase time for non-expert users. Dapper can integrate seamlessly with EF in architectures, where EF handles complex CRUD operations and management while Dapper optimizes performance-sensitive "hot paths" like bulk reads or reporting queries, leveraging the same database connection without conflicts. This approach balances EF's comprehensive tooling with Dapper's efficiency, as supported by extension packages and shared data contexts in .NET applications.

Versus Other Micro-ORMS

Dapper distinguishes itself from other micro-ORMS like Massive and PetaPoco through its performance benchmarks and origins within the Stack Overflow development team, which has contributed to its widespread reliability and trust among developers. Historical comparisons from 2017 show Dapper outperforming the now-discontinued Massive in mapping speed and overall execution, particularly for high-volume queries, due to its efficient extension of ADO.NET without the dynamic object focus that introduced overhead in Massive. PetaPoco, an actively maintained alternative as of 2025, offers comparable performance in basic operations and greater flexibility through model attributes that reduce explicit SQL writing, though it lacks Dapper's streamlined API for direct SQL enthusiasts, making Dapper preferable for scenarios requiring minimal abstraction layers. When compared to RepoDb, a micro-ORM active in 2025, Dapper excels in raw mapping velocity for simple queries based on 2020 benchmarks but provides fewer built-in patterns, relying instead on user-defined extensions for such abstractions, whereas RepoDb integrates these patterns natively to streamline CRUD operations while maintaining SQL . Both tools emphasize over SQL generation, avoiding the heavy of full ORMs, though RepoDb's approach adds query expression trees and batching features that Dapper achieves through custom implementations. Micro-ORMS such as Dapper, PetaPoco, and RepoDb share core traits of prioritizing execution speed and lightweight footprints over comprehensive feature sets, enabling direct SQL usage with reduced boilerplate compared to traditional ORMs. Dapper leads in adoption, with over 567 million downloads as of November 2025, and includes robust asynchronous support out of the box, which enhances its suitability for modern, scalable .NET applications. Selection criteria for these tools often hinge on project needs: Dapper suits purists seeking unadorned SQL mapping with proven performance, while alternatives like RepoDb appeal for built-in extensions such as automated CRUD generators and broader database compatibility without sacrificing efficiency.

Adoption

Notable Uses

Dapper was originally developed at to address performance bottlenecks in handling high-volume database queries for its Q&A platform, where it powers efficient object mapping from SQL results to support hundreds of calls per second with low CPU overhead. In open-source projects, Dapper is integrated into Hangfire, a background job processing framework for .NET, where it is embedded internally within the SQL Server storage module to enable reliable and fast data access for job queuing and execution. Enterprise adoption of Dapper often occurs in performance-critical layers, such as platforms requiring rapid inventory lookups and high-throughput , as evidenced by its inclusion in tech stacks at various and firms. Case studies from .NET development communities highlight significant performance gains when migrating from full ORMs like to Dapper; for instance, benchmarks demonstrate up to 3x faster single-entity retrieval and 2x faster bulk inserts in large datasets, establishing key context for its efficiency in read-heavy workloads.

Community and Support

Dapper maintains an active open-source community centered around its repository, which has garnered over 15,000 stars as of 2025, reflecting widespread adoption among .NET developers. The repository sees ongoing engagement, with hundreds of open issues and dozens of pull requests facilitating discussions on enhancements and bug fixes. Additionally, the "dapper" tag on hosts more than 10,000 questions, serving as a primary for and knowledge sharing. Support resources for Dapper are primarily community-driven, with the official documentation provided through the README and a dedicated GitHub Pages site offering overviews, usage examples, and FAQs. Complementary tutorials are available on dedicated platforms like LearnDapper.com, which covers querying, parameters, and extensions in depth, and DapperTutorial.net, focusing on practical examples for CRUD operations and dynamic parameters. While Dapper lacks formal commercial support, it benefits from sponsorships via Sponsors, including major contributions from Dapper Plus by ZZZ Projects and AWS since October 2023, which fund development and maintenance. Community contributions remain robust, with pull requests addressing database-specific improvements such as enhanced support through extensions like Dapper.Oracle, which handles Oracle-specific SQL types and parameters. The project issues regular releases, with version 2.1.66 ensuring compatibility with .NET 9 and later, including updates for runtime performance and async operations. Looking ahead, Dapper continues to evolve with a focus on async-first methodologies, leveraging methods like for scalable database interactions in modern .NET applications. Its lightweight design positions it well for cloud-native integrations, aligning with .NET's ecosystem for containerized and serverless environments without requiring significant architectural changes.

References

  1. [1]
    DapperLib/Dapper: Dapper - a simple object mapper for .Net - GitHub
    Dapper is a NuGet library that you can add in to your project that will enhance your ADO.NET connections via extension methods on your DbConnection instance.
  2. [2]
    StackOverflow's ORM goes Open Source - Dapper.Net - InfoQ
    Apr 14, 2011 · A simple ORM used in StackOverflow titled Dapper.Net was recently released on code.google.com. This ORM specializes in fast generation of objects from SQL ...Missing: origins | Show results with:origins
  3. [3]
    Building a CRUD API With Dapper - Telerik.com
    Apr 27, 2023 · Dapper is an open-source micro-ORM for .NET developed by Marc Gravel and Sam Saffron in 2011 while trying to solve Stack Overflow performance ...Persisting Data With Dapper · Creating The Repository... · Creating The Service Class
  4. [4]
    Dapper 1.50.0 - NuGet
    Jul 1, 2016 · Release Notes. A high performance Micro-ORM supporting SQL Server, MySQL, Sqlite, SqlCE, Firebird etc.. Product, Versions Compatible and ...
  5. [5]
  6. [6]
    Data Points - Dapper, Entity Framework and Hybrid Apps
    There is another notable performance benefit here: Dapper effectively caches the mapping it learned, resulting in very fast deserialization of subsequent ...
  7. [7]
    Dapper vs Entity Framework: A Detailed Comparison - TatvaSoft Blog
    Dapper and EF Core are the two most popular and reliable ORM frameworks in the .NET ecosystem. Both aim to simplify data access.
  8. [8]
    'dapper' tag wiki - Stack Overflow
    Dapper is a micro-ORM for .NET developed and used by the Stack Overflow team, focusing on raw performance as the primary aim. Dapper is a micro-ORM, offering ...Missing: bottlenecks | Show results with:bottlenecks<|control11|><|separator|>
  9. [9]
    Dapper 2.1.66
    - **Total Download Count**: Not explicitly stated for November 2025; latest data unavailable.
  10. [10]
    Releases · DapperLib/Dapper - GitHub
    2.1.66 Latest WARNING: DateOnly / TimeOnly support, added in 2.1.37, had multiple failure modes, and was quickly reverted pending finding the time to ...
  11. [11]
    Clarification - Dapper connection management · Issue #672 - GitHub
    Jan 2, 2017 · Dapper will close the connection if it needed to open it. So if you're just doing 1 quick query - let Dapper handle it. If you're doing many ...
  12. [12]
    Dapper 2.1.66 - NuGet
    Dapper is a simple micro-ORM used to simplify working with ADO.NET; if you like SQL but dislike the boilerplate of ADO.NET: Dapper is for you!Dapper 1.50.2 · Dapper 1.38.0 · Dapper 2.0.123 · Dapper 1.12.0
  13. [13]
    Is there a way to call a stored procedure with Dapper? - Stack Overflow
    May 11, 2011 · Stored procedures returning a result set can be run using Query; stored procedures which don't return a result set can be run using Execute.7 Comments · 2 Comments · 1 Commentc# - Using Dapper by stored procedure - Stack OverflowDoes Dapper support strongly typed objects with a stored procedure?More results from stackoverflow.com
  14. [14]
    Dapper.NET and stored proc with multiple result sets - Stack Overflow
    Jun 11, 2011 · QueryMultiple supports the ability to deal with multiple result sets. The only design restriction we added was totally disabling buffering for the grid reader.C# Dapper: Getting multiple result sets from stored procedure?Dapper Multi Mapping with QueryMultiple - Stack OverflowMore results from stackoverflow.com
  15. [15]
    Dapper Parameter, SQL Injection, Anonymous and Dynamic ...
    Jul 9, 2025 · Dapper allows specifying parameters in querying methods to avoid SQL Injection. Learn more about how to use anonymous, dynamic, string, ...
  16. [16]
    Dapper vs. Entity Framework Core: Performance & Use Cases
    Mar 28, 2025 · Dapper: Its minimal abstraction and direct SQL execution allow it to process queries up to 5–10x faster than EF Core. By bypassing ORM ...<|control11|><|separator|>
  17. [17]
    Dapper vs Entity Framework vs ADO.NET Performance Benchmarking
    Jul 29, 2015 · In short, Dapper.NET is unquestionably faster than EF and slightly faster than straight ADO.NET, but we'll be doing the majority of development ...
  18. [18]
    EF Core vs Dapper benchmarks - GitHub
    EF Core vs Dapper ; SelectEntityByIdEfCompiled, 41.593 us, 0.6043 us ; SelectEntityByIdDapper, 7.749 us, 0.0482 us ; SelectFieldByIdEf, 83.249 us, 0.2535 us ...
  19. [19]
    Dapper vs Entity Framework (EF6 or EF Core)
    Jul 9, 2025 · This article will help you better understand the difference between Dapper and Entity Framework and how to choose which ORM you should use in your next project.
  20. [20]
    ORMs for .NET Core - InfoQ
    Dec 4, 2017 · On the other end of the scale is the well-known micro-ORM, Dapper. Often regarded as the fastest ORM, Dapper is consistently at or near the top ...
  21. [21]
    The Big Fight — Dapper vs Entity Framework 6 Detailed Benchmark
    Jan 4, 2025 · Dapper has slightly better performance on three tests. Memory management is also handled better by Dapper. On the outliers table, ...
  22. [22]
    Dapper.MicroCRUD vs Massive | LibHunt
    Compare Dapper.MicroCRUD and Massive's popularity and activity. Categories: ORM. Dapper.MicroCRUD is less popular than Massive.
  23. [23]
  24. [24]
    Add/Insert style of petapoco vs dapper - Stack Overflow
    Oct 22, 2013 · Although Dapper is more famous, PetaPoco has the same performance, has the same concepts but it's a bit more flexible.Best strategies when working with micro ORM?Dapper.Rainbow VS Dapper.ContribMore results from stackoverflow.comMissing: features | Show results with:features
  25. [25]
    Exploring the .NET open source hybrid ORM library RepoDB
    Jul 17, 2020 · Dapper is a great and venerable library that is great if you love SQL. Repo is a hybrid ORM and offers more than one way to query, and support a ...
  26. [26]
    9 Best .NET ORM Solutions for 2025 [Comparison Guide] - Devart Blog
    Jan 2, 2025 · PetaPoco is a lightweight and high-performance micro-ORM for .NET designed for simplicity, speed, and flexibility. It took best from multiple ...
  27. [27]
    RepoDb, a hybrid micro ORM for .NET applications - Luis Llamas
    Nov 8, 2020 · RepoDb is an Open Source ORM for .NET, which comes to fill the gap between micro ORMs like Dapper, and full ORMs like Entity Framework.Using RepoDb · CRUD Operations · Create an entry · Read an entry<|separator|>
  28. [28]
    Dapper 2.0.151 - NuGet
    Aug 18, 2023 · Downloads. Full stats →. Total 559.1M. Current version 7.0M. Per day ... Dapper gravatar Dapper · orm sql micro-orm. 2019 Stack Exchange, Inc ...
  29. [29]
    What will make you choose RepoDB over Dapper
    Apr 6, 2020 · Both library is an ORM framework for .NET. They are both lightweight, fast and efficient. The Dapper is a full-fledge micro-ORM whereas RepoDB ...
  30. [30]
    What ORM does Stack Overflow use with their ASP.NET MVC project?
    Mar 30, 2009 · Since Mar 2011, they are using Dapper. Here's the introduction post for Dapper by the developer Sam. Below is the original accepted answer which is out of date.Missing: origins | Show results with:origins
  31. [31]
    Hangfire version conflict with Dapper? - question
    Nov 17, 2016 · Regarding Hangfire.SqlServer, Dapper is merged and internalised into Hangfire.SqlServer.dll assembly, so no versioning issues could appear.Missing: ORM | Show results with:ORM
  32. [32]
    Reviews, Pros & Cons | Companies using Dapper - StackShare
    14 companies reportedly use Dapper in their tech stacks, including FinTech, Business Logic, and dgpays. FinTech. Business Logic. dgpays. Stack ...
  33. [33]
    EF Core 9 vs. Dapper: Performance Face-Off
    Dec 18, 2024 · A detailed comparison of Dapper and Entity Framework Core 9's performance in common tasks like retrieving, inserting, and updating records.
  34. [34]
    Newest 'dapper' Questions - Stack Overflow
    Dapper is a micro-ORM, offering core parameterization and materialization services, but (by design) not the full breadth of services that you might expect ...Missing: origins | Show results with:origins
  35. [35]
    Dapper - a simple object mapper for .NET - GitHub Pages
    Dapper is maintained by DapperLib. This page was generated by GitHub Pages.
  36. [36]
    Welcome To Learn Dapper ORM - A Dapper Tutorial for C# and ...
    Jul 9, 2025 · Dapper is a simple and efficient .NET library for data access and object-relational mapping (ORM) that supports .NET Core and C# language.Is Dapper Plus related to Dapper? · Dapper Querying · Dapper.Extensions · Insert
  37. [37]
    Dapper Tutorial
    Dapper has earned the title of king of the C# Micro ORM but is considered by multiple people as a simple object mapper for .NET.Dapper Query · Dapper List Parameter · Dapper Dynamic Parameter · QueryFirst
  38. [38]
    Sponsor @DapperLib on GitHub Sponsors
    Dapper provides simple and direct access to SQL databases in .NET, without the overheads of a full ORM - with correct parameterization, materialization, etc - ...
  39. [39]
    Oracle support for Dapper Micro ORM. - GitHub
    This assembly adds support for writing Oracle-specific SQL, that supports all dbtypes used by the Oracle managed provider on a parameter.
  40. [40]
    How to perform async operations using Dapper - InfoWorld
    Take advantage of the async methods in Dapper to improve the scalability and performance of your ASP.NET Core applications.
  41. [41]
    What is Dapper ORM? Features, Benefits, and How to Use It - Devart
    Dapper ORM is a lightweight, high-performance micro-ORM for .NET. Learn all about its features and benefits and see how to implement them in C#.<|control11|><|separator|>