Skip to content

Releases: neo4j/neo4j-dotnet-driver

5.21.0

30 May 14:08
aad88f8
Compare
Choose a tag to compare

No changes.

5.20.0

03 May 08:26
858e73d
Compare
Choose a tag to compare

⭐ New Features

  • Object mapping moved out of preview (#784)
  • Default object mapper made stricter in order to avoid unpredictable or unexpected results (#792, #796)

5.18.1

18 Mar 18:12
Compare
Choose a tag to compare

🐛 Bug Fix:

  • Reclassification of transient error when opening SSL Connection (#788)

5.18.0

06 Mar 13:59
a1670b7
Compare
Choose a tag to compare

What's Changed

Full Changelog: 5.17.0...5.18.0

5.17.0

29 Jan 16:00
eb868dc
Compare
Choose a tag to compare

⭐ New Features

  • support .NET 8 (#770)

🐛 Bug fix

  • fix cancellation token being ignored for ExecuteQuery (#771)

5.16

09 Jan 09:37
ca3700e
Compare
Choose a tag to compare

⭐ New features

  • Introduce TransactionConfig parameter to query config (#754)
  • Liveness check (#756)

🚀 Optimizations

  • Protect default memory pool for bolt (#758)
  • Update array pool config, allow driver to request a max sized array (#764)
  • Reduce memory allocations when creating a record object (#767)

Other

  • Refactoring of internal code to remove warnings and tidy the code base

5.15

09 Jan 09:37
67e0228
Compare
Choose a tag to compare

🔮 Preview features

  • Constructor mapping added to object mapping feature (#751)

Other

  • The legal header at the top of each source file has been updated (#752)

5.14

09 Jan 09:37
67e0228
Compare
Choose a tag to compare

⭐ New features

  • Reauth moved from preview to general availability. (#744)
  • Introduction of Security and Topology notification categories. (#738)
  • Introduction of Bolt 5.4 (Introduced to Neo4j in server version 5.13) and TELEMETRY message. (#735
    • The driver can opt out of telemetry collection using ConfigBuilder.WithTelemetryDisabled().
    • Telemetry is only collected when connecting to aura and is limited to which APIs were used to create a transaction.

⚠️ Bug fixes

  • All cursors belonging to a transaction are now invalidated if an error invalidates any of the transaction's queries. (#737)
    • If the initial exception was ignored, this could result in undefined behavior, but now will result in a TransactionTerminatedException; Any further interaction with any constituent results from the transaction will throw this error.

What's Changed

Full Changelog: 5.13.0...5.14.0

5.13.0

28 Sep 09:30
9854066
Compare
Choose a tag to compare

🔮 Preview Feature: Record to Object Mapping

This new feature allows records to be mapped to objects simply and without endless boilerplate. Please see this discussion for full details and instructions.

🔮 New convenience methods in preview

The following extension methods have been added in order to make code that deals with the IRecord and IEntity (implemented by both INode and IRelationship) interfaces more readable - for example, when writing custom mapping code. The Neo4j.Driver.Preview.Mapping namespace must be referenced to use these methods.

IRecord.AsObject<T>()

Invokes the mapping functionality and returns an instance of T mapped from the record. T must have a parameterless constructor.

IRecord.GetValue<T>(string key)

Gets the value of the given key from the record, converting it to the given type. For example, the code record["name"].As<string>() becomes record.GetValue<string>("name").

IRecord.GetXXXX(string key)

This is a group of extension methods for the most commonly used primitive types: GetString, GetInt, GetLong, GetDouble, GetFloat and GetBool. These just call GetValue<T> for the type named in the method name, so record["name"].As<string>() becomes record.GetString("name").

IEntity.GetValue<T>(string key)

Gets the value of the given key from the entity, converting it to the given type. For example, the code entity["name"].As<string>() becomes entity.GetValue<string>("name").

IEntity.GetXXXX(string key)

The same group of methods as IRecord.GetXXXX, but for an entity.

IRecord.GetEntity(string key)

Gets the IEntity identified by the given key from the record. When combined with the other methods, this can lead to more readable code that gets values from entities within records, so for example this code:

var name = record["person"].As<IEntity>().Properties["name"].As<string>();

becomes:

var name = record.GetEntity("person").GetString("name");

5.12.0

31 Aug 14:05
7b8ef91
Compare
Choose a tag to compare

🚀 Optimization

  • ExecutableQuery performance enhancement: Remove a server round-trip for IDriver.ExecutableQuery API Docs.

🔬 Experimental/Preview changes

  • Changes to the re-auth functionality allow for catering to a wider range of use cases including simple password rotation.
  • All re-auth-related namespaces have been moved to preview - previously some did not have this, although the classes therein would not have been usable.
  • The OnTokenExpiredAsync method in the IAuthTokenManager interface was removed, and a new HandleSecurityExceptionAsync method was added in its place.
  • The ExpirationBased method in AuthTokenManagers was renamed to Bearer, and a new Basic method was added to cater for password rotation.