Skip to content

Release Notes

Adam Schroder edited this page May 24, 2019 · 14 revisions


  • Add support for .netstandard 2.0
  • Update fastJSON to 2.1.34
  • Add new IAsyncDatabase interface
  • Add new Async methods
  • Add UpdateBatch and UpdateBatchAsync
  • Allow AnsiString value to be null fixes #539
  • Add comments for SqlBuilder.AddClause method
  • Add INeedDatabase interface for query providers so extension methods can be done
  • Fix bug where hooks weren't getting called for async inserts
  • Update SqlBuilder to ReuseParameters if required
  • Add support for Trim(), TrimStart() and TrimEnd()
  • Rename Sql Where overloads to WhereSql to avoid intellisense conflicts
  • Throw error if setting AutoIncrement to true when PrimaryKey is a composite key
  • Fixed exception when assigning value to a nullable primary key #404
  • Escape Firebird identifiers using double quotes
  • Add validation for page and itemsPerPage variables #456


  • Add support for nested dictionary mapping


  • Allow chained where clauses in linq provider. fixes #447


  • Fix SqlBuilder with multiple clauses


  • Fix issue when combining a linq where with a sql string where. fixes #428


  • Add async methods for First, FirstOrDefault, Single and SingleOrDefault. fixes #406
  • Update System.Data.SqlClient to 4.4.0. fixes #425


  • Add Distinct Async #400
  • Support where statements in #408


  • Fix where clauses in linq statements fixes #409


  • Fix conversion bug #407


  • Add extra UpdateAsync method for fields to IDatabase interface. fixes #389
  • Add bitwise support in linq expressions. fixes #384
  • Improve handling of multiple attributes. #376
  • FluentMappingOverrides should override complex prefix. Fixes #388
  • Ensure the async helper methods are awaited. Fixes #361
  • Implement ObjectValue as a concept (wiki to come)
  • Fix parameter reuse to include IN statements. fixes #405


  • Fix mapping to structs
  • Fix ForceToUtc on attribute mapping to be true by default
  • Add extra UpdateAsync method for fields to IDatabase interface #389
  • Add bitwise support in linq expressions. fixes #384
  • Improve handling of multiple attributes. #376
  • FluentMappingOverrides should override complex prefix. Fixes #388


  • Make AddTypeMap public
  • ToListAsync with IncludeMany now fixed
  • Fix ParameterHelper to reuse parameters if they were reused in original query
  • Support the nullable HasValue when used with another binary expression
  • Rename variable reader to values on delegate
  • Fix 'in' query with ParameterHelper when list is empty
  • Mapping perf: Use GetValues once per row rather than GetValue each per field.


  • Change FastJsonColumnSerializer to render a Guid as a string by default
  • Add CommandType as a parameter to Execute and ExecuteScalar
  • Remove DbFactoryProvider overload when passing in a raw DbConnection
  • Upgrade to .net core 1.0
  • Checks if the column starts with "npoco_" case insensitive. (#298) (@imasm)
  • Fix Async support in Firebird (#297)


  • Add ability to insert base/abstract base class
  • Ensure value type fields can be mapped to
  • Do not include Result columns when using include in the query provider
  • Add constructor overloads to SerializedColumn attribute for column name
  • Implement SqlOfTContext (@zpqrtbnk)
  • Update to .NET Core RC2


  • Add separate NPoco.JsonNet package and use fastJSON internally by default
  • Fix issue with using First() or FirstOrDefault() in Include statement
  • Support Npgsql 3.x with parameter names
  • Add XML comments to IDatabase
  • Add support to map to "get" only properties in c# 6


  • Add JSON.NET internally for serialized column


  • Breaking changes and more info listed: Version 3
  • Many internals rewritten
  • Initial work to support .NET Core
  • Add interceptors instead of having to use inheritance


  • Fix Exists call when using composite keys
  • Allow SQL Server to use output instead of scope_identity(). Property on SqlServerDatabaseType.
  • Fix FetchMultiple after mapping to weak types broke it.


  • Paging Regex supports more cases
  • Fix snapshotter bug with nested objects
  • SingleById should ignore EnableAutoSelect setting
  • EnumMapper now throws a useful exception to indicate something went wrong
  • Enums will automatically be mapped to strings if the column type is set to string [ColumnType(typeof(string))]
  • Add missing Version overload to fluent config builder
  • Fix IsNew<T> for composite keys


  • Fix LINQ queries with char columns
  • SqlBuilder will put brackets around each call to Where()
  • Add FetchBy back to IDatabase
  • Set AnsiString in LINQ correctly so queries on a varchar column will use indexes
  • Save<T> method now takes T parameter not object
  • Add Async methods for querying, updates, inserts and deletes
  • PocoDataFactory only created once if not set manually
  • Ability to map objects in non-generic way using IEnumerable<object> Query(Type type, ... method


  • Add support for timestamp column
  • Add base62 encoder to pass timestamp byte[] around
  • Modify orderby RegEx to support nested subquery filters (much faster too)
  • Allow named where statements in Sql Builder (/**where(first)**/ sb.Where("first", "name = @0", "John"))
  • Remove FetchBy (use Query<T> now)
  • Add Distinct to QueryProvider which can do a distinct projection
  • Cache config per DatabaseFactory
  • Fix enum parameters for in clauses
  • Allow Dictionary<string, object> to be passed as first parameter for dynamic parameters (@andersjonsson)


  • Fix issue with UpdateMany not finding the set columns
  • Allow SqlParameters to be used in SqlBulkCopy
  • Numerous LINQ fixes (!Contains, !x.Name.StartsWith, Substring, Projections, Constant Boolean Expressions)


  • Add Firebird support
  • Improve memory usage performance (@Shandem)
  • Set MySql default transaction isolation level to IsolationLevel.RepeatableRead


  • Move check for dynamic object to top of IsNew method
  • Run mapper through primary key columns


  • Make CreateCommand public (#116)
  • Fix nullable enums in LINQ queries (#115)


  • Add shortcut database method to update snapshotted pocos
  • Fix FormatCommand with Null values
  • Fix for issue #106
  • Make SqlBulkCopyOptions available to BulkInsert helper
  • Snapshotter supports private fields
  • Add support for custom mapper in SqlBulkInsert
  • Make dynamic queries use PocoExpando which is case insensitive
  • Fix paging regex and include Version column on pococolumn
  • Snapshot update columns with private setter
  • Add Alias and Computed Attributes
  • Remove the need to have property on Poco with AutoJoin
  • Fix inherited type properties to emit the correct SQL
  • Fix paging for non Sql Server and Oracle
  • Optimize Exists to use count(*)
  • Fix Paged queries in Postgres and add TableInfo to PocoColumn
  • Fix OrderBy Descending
  • Create Tests for Linq Provider
  • Support self referencing joins to one level
  • Add alias on TableInfo
  • Cleanup building of sql
  • Initial work on aliases
  • Fix Enum parameters for columns stored as strings
  • Add "returning" primary key
  • Add Firebird database type
  • Add multi-poco paging to interface
  • Add multi-poco paging support
  • Allow ColumnInfo to store Ignored columns
  • Allow HasValue for nullable type in Where query
  • Allow private constructor with snapshotter
  • Allow SqlBuilder to make token replacement mandatory
  • Make Transaction inherit from an interface
  • Make In take an IEnumerable
  • Add exception when mapping to poco with no parameterless constructor
  • Fix for DbType.Time not working for SqlServer
  • Fix Guid parameters
  • Fix provider name for SQLite
  • Allow sql expressions to be a bit more complex


  • Handle error when nested object is null and nested nested object trying to be mapped to it
  • Change Connection closing to only leave open if explicitly opened, otherise it will be closed for every command
  • Remove ForceDateTimeToUtc from Database and moved to PocoColumn
  • Make all On* methods protected
  • Add Apache License V2
  • Enable the SqlBulk helper to support glimpse connection and transactions
  • Fix for where with empty list for in clause
  • Fix bug with UpdateWhere doing a delete
  • Fix underscore mapping and extensions
  • Updated Update expression to use converter
  • Added ability to update and delete with strong types
  • Ensure DbColumnType is set with overrides
  • Don't map to a property with only a getter
  • Fix for mapping private properties on base types


  • Allow mappings to be inherited
  • Support new Oracle client (@smlynch)
  • Fix closed connection when using bulk insert (@dustinhorne)
  • Fix oracle paging (@smlynch)


  • Insert, Update and Delete methods have been made virtual
  • Conventions now use MemberInfo to support mapping to fields
  • Fix OneToMany() bug when no many results returned
  • Fix nullable enums
  • Fix when mapping to a nullable


  • Fix invalid cast when destination type is nullable


  • Ability to map fields in addition to properties
  • Don't map public readonly fields
  • Fix bug with SqlBuilder and parameters
  • Make paging more generic


  • Only nested objects are mapped if at least one column is not null, otherwise null object is returned
  • Fix null connection for SqlExpressions


  • Allow dictionary to be passed as primary keys for composite keys
  • Add FetchBy<> and FetchWhere<> so that basic Linq queries are possible
  • DatabaseFactory is no longer static and must be set per instance of Database created.
  • Added Insert/Update/Delete hooks
You can’t perform that action at this time.