TMS Aurelius

ORM framework for Delphi with full support for data manipulation, complex and advanced queries, inheritance, polymorphism, and more...


v3.11 (February 15, 2018)

Version history

Version History



  • New : TCriteria.Find.Open now can be iterated using
  • New : LINQ SqlFunction and ISQLGenerator.RegisterFunction allows creating custom SQL functions to be used in LINQ.
  • New : ILike operator in LINQ. You can now also use ILike operator in Linq expressions.
  • Improved : TCriteria.Open now returns ICriteriaCursor instead of TCriteriaCursor. This is a minor breaking change.
  • Improved : TAureliusDataset is not "Sequenced" anymore when RecordCount mode is set to Retrieve.
  • Improved : TAbstractSQLGenerator.EnforceAliasMaxLength allows avoiding issues when field names in database are at the maximum size and might cause "field not found" errors when executing LINQ queries.
  • Improved : No more UPDATE SQL statements executed when inserting child (many-valued association) items.
  • Improved : More detailed info when exception EAssociationReferencesTransientObject is raised ("Association references a transient object").
  • Fixed : Aurelius Dataset fields not notifying visual controls when subproperties were being automatically updated due to SyncSubprops behavior.


  • New : TAureliusDataset.RecordCountMode property.
  • Improved : Significant performance increase when retrieving entities from database.
  • Fixed : TCriteria.Refreshing state was lost when TCriteria was cloned.
  • Fixed : SQLite driver refactored to use static library on Android due to Android 7 Nougat error: "unauthorized access to "".
  • Fixed : Design-time wizard icon not showing correctly in Delphi 10.2 Tokyo.


  • New : TObjectManager.FindCached and IsCached methods.
  • New : TCriteria.Refreshing method.
  • New : TAureliusDataset.SyncSubprops property allows automatic update of associated fields.
  • New : TAureliusDataset.SubpropsDepth property allows automatic loading of subproperty fields.
  • New : TAureliusDataset.DefaultsFromObject property brings field default values with object state.
  • New : TAureliusDataset popup menu option at design-time for quick reloading field definitions.
  • New : DBIndex attribute.
  • Improved : When targeting DB2 databases, TDatabaseManager now retrieves schema of database objects and updates/creates them accordingly.
  • Improved : Updating ElevateDB database schema (TDatabaseManager.UpdateDatabase) is significantly faster now.
  • Improved : TAureliusDataset doesn't automatically call Flush anymore on Insert and Delete operations, when Manager property is set.
  • Improved : Faster lazy-loading of proxied associations in some situations.
  • Fixed : Firedac + Oracle on Delphi Tokyo was causing "Data Too Large" error on fixed-sized parameters.
  • Fixed : Calling TAureliusDataset.RecordCount on a closed dataset was raising an Access Violation.
  • Fixed : Calling TAureliusDataset.Delete was raising an exception in some specific situations.
  • Fixed : Argument out of range on specific Merge operations.


  • Fixed : Using AureliusDataset, during an insert, if a Post operation failed, an Access Violation would be raised if user cancels insertion of record.
  • Fixed : Access Violation when loading a lazy blob in the handler of OnDeleted event


  • New : Linux platform support together with Rad Studio 10.2 Tokyo support
  • Fixed : TGlobalConfigs.GetInstance.SimuleStatements not working
  • Fixed : Memory leaks in mobile platforms
  • Fixed : Error when loading entities with inheritance where a lazy blob field is declared in an inherited class.
  • Fixed : Better transactions handling on UIB (Universal Interbase) driver


  • New : Manager events OnInserting, OnUpdating, OnDeleting.
  • Improved : Not equal (<>) operator support in Linq queries
  • Fixed : JSON Deserializer failed when deserializing nullable enumerated values
  • Fixed : Firebird schema update was trying to generate sequences even though they already existed in database (regression)
  • Fixed : Error inserting records in SQL Server when table name ends with "Values"
  • Fixed : DB2 dialect was not supporting schemas (regression)


  • New : MSSQL dialect UseBoolean property allows using BIT data type for boolean fields in SQL Server
  • New : Firebird3 dialect support
  • Improved : Demos rewritten to better show use more recent Aurelius features
  • Improved : Column names can now be mapped using double quotes
  • Improved : Better error handling when SQLite DLL is not available
  • Fixed : Wrong behavior and cast errors in TAureliusDataset when moving dbgrid field columns linked to the dataset
  • Fixed : Memory leaks on nextgen (mobile) platforms when using FireDac (version 3.4.1)
  • Fixed : IBExpress adapter not working if using the overloaded Create constructor that receives a TComponent parameter
  • Fixed : Error with field names containing spaces.
  • Fixed : Cast error in Aurelius Dataset when setting a nullable enumerated field to null
  • Fixed : Aurelius Dataset Locate method accepts variant array as search value even when locating for a single field


  • Fixed : Memory leaks on nextgen (mobile) platforms when using FireDac


  • New : TDatabaseManager.IgnoreConstraintName property for better control of database schema update and validation
  • New : Linq query syntax improved with support for relational operators: Linq['Name'] = 'Mia'. All query examples in this documentation updated to newer syntax.
  • New : Linq functions Contains, StartsWith, EndsWidth now support projections: Linq['Name'].StartsWith(Linq['OtherField'])
  • New : Linq "type-helper" version all existing functions, like Upper or Year: (Linq['Name'].Upper = 'MIA') and (Linq['CreatedAt'].Year = 2015)
  • New : In clause in Linq queries
  • New : Cross-database Concat function: Linq.Concat(Linq['FirstName'], Linq['LastName'])
  • New : Arithmetic projections Add, Subtract, Multiply and Divide, also supporting operators: Linq['Total'] + Linq['Additional']
  • Fixed : ZeosLib depending on unnecessary units


  • New : TObjectManager.Flush method can now receive an entity as parameter allowing flushing a single entity.
  • New : TCascadeType.Flush cascade type allows control of how associated objects will be flushed when flushing a single entity
  • New : Support for ZeosLib database-access components
  • Improved : When retrieving Int64 values from database, it now tries to handle the value even when the underlying db access component provides the value as float
  • Fixed : When using bidirectional associations, in some rare situations the many-to-one side of association was being cleared
  • Fixed : TAureliusDataset.RecNo returning wrong value when in insert mode
  • Fixed : TAureliusDataset displaying wrong records when using Filter in a detail dataset (DatasetField pointing to another dataset)


  • New : TManagerEvents.OnSQLExecuting event that is fired for every SQL statement executed in database
  • New : TCriteria.Clone method allows cloning an existing Aurelius criteria
  • New : TAureliusDataset.IncludeUnmappedObjects property to allow object and list fields even if they are not mapped in class
  • Improved : Online Resources updated with links for new videos and articles
  • Improved : Mapping table and field names with spaces is now allowed, without needing to quote the names in quotes in mapping
  • Fixed : TProjections.Count failed for counting GUID fields
  • Fixed : TDateTime field values losing time part when using dbGO and ODBC driver
  • Fixed : Inheritance using discriminator failed in some situations with SQLite due to int32/int64 type mismatch
  • Fixed : DB Connection Wizard failed when using AnyDac connection
  • Fixed : Breaking change: Updating/Merging objects with proxied associations that were not modified was not clearing the value
  • Fixed : Breaking change: Merging transient objects with proxy collections was ignoring the collection content. TObjectManager.MergeListLegacyBehavior
  • Fixed : "Duplicate Field Name" error in Aurelius Dataset when loaded object had properties that have been redeclared from an ancestor class


  • New : Explorer.ObjectFactory and Manager.ObjectFactory properties allows defing a custom object factory for creating entity classes.
  • New : Delphi 10.1 Berlin support
  • Fixed : Database update using table schema now working with PostgreSQL and MS SQL Server


  • New : TObjectManager.Replicate method
  • New : Design-time wizard "New TMS Aurelius Connection" makes it very straightforward to create Aurelius database connections (IDBConnection)
  • Improved : TObjectManager.Find has a new overload that accepts TGuid value for id
  • Improved : TDatabaseManager can receive a TArray, allowing to create the database structure for all of them at once
  • Improved : Saving an object with user-assigned id was calling SQL to retrieve ID without need
  • Improved : Automapping now sets generator to SmartGuid if field FId is of type TGuid
  • Fixed : Wrong error message (AV) when opening a cursor and SQL dialect is not registered
  • Fixed : Sporadic AV when destroying TAureliusDataset without closing it
  • Fixed : Merging an object with a lazy-loaded list wouldn't delete removed items on Flush if the object being merged was not loaded from TObjectManager
  • Fixed : After Mapping Explorer raised an error about wrong mapping when retrieving columns for a class, it could later not raise that error anymore


  • New : TObjectManager.UseTransactions property allows control whether manager uses transactions to perform internal operations. This is a breaking change.
  • New : Optimistic versioned concurrency control of entities using Version attribute
  • Improved : More detailed error message when loading a proxy fails due to duplicated records.


  • New : Delphi 10 Seattle support


  • New : OnInserted event parameters now include Master that hold the parent instance in case of unidirectional items being inserted
  • New : Cross-database, high-level projection functions in Aurelius queries. Date/time functions added: Year, Month, Day, Hour, Minute, Second. String functions added: Upper, Lower, Substring, Position, Length, ByteLength.
  • New : Additional TLinq conditions for string comparison: Contains, StartsWith, EndsWith.


  • Fixed : AV when using Update event listener for objects in manager without previous state (using Update method)


  • New : Events system allows subscribing listeners to respond to several events (e.g, when an entity is inserted, updated, etc.)
  • Improved : When deserializing objects from JSON, properties unknown to the entity will now be ignored, instead of raising an error.
  • Improved : Music Library demo includes an audit log viewer that illustrates usage of the events system.
  • Fixed : FireDAC driver not compiling on XE8


  • New : Support for Delphi XE8


  • Improved : TBlob.Data property removed. Breaking change
  • Improved : TBlob handling of data (especially using AsBytes property) improved for better performance
  • Fixed : TAureliusDataset now retrieves correct value for RecordCount when dataset is filtered
  • Fixed : Setting a lazy TBlob content that was not yet loaded didn't change blob content
  • Fixed : Rare Access Violation when reloading associated object lists that exist in object manager
  • Fixed : Flush not updating properties modified if lazy proxy/blob is loaded after properties were modified


  • Improved : TAureliusDataset makes it easy to reload fields from classes at design-time by remembering the last class used to load fields
  • Improved : TAureliusDataset design-time dialog now makes it much easier to find a class by providing a search box
  • Fixed : TObjectManager.Merge was not updating collections when none of parent object properties was changed
  • Fixed : Rare error when inserting records in MS SQL Server, using SQL-Direct and native SQL Server client
  • Fixed : Error when inserting records with identity Id on tables with INSERT triggers in MS SQL Server
  • Fixed : Access Violation when destroying entity objects before destroying a TAureliusDataset component
  • Fixed : AV when loading a proxy value after an object refresh


  • New : TObjectManager.Evict method allows removing an object instance from the manager without destroying it
  • New : TFetchMode option in CreateAlias allows per-query setting for eager-loading associations to improve performance
  • New : TCriteria.OrderBy provides an easier, alternative way to TCriteria.AddOrder to specify criteria order
  • New : TAureliusDataset.ParentManager allows fine-grained control over the manager used in detail datasets
  • New : TAureliusDataset.Current now returns an object even in insert state
  • Improved : Removed an extra final SQL being executed in paged queries using TAureliusDataset
  • Improved : Automatic destruction of TCriteriaResult objects in TAureliusDataset when using SetSourceCriteria or SetSourceCursor
  • Fixed : TAureliusDataset.BookmarkValid was wrongly returning true after the bookmarked record was deleted
  • Fixed : Saving child objects using unidirectional ManyValuedAssociation when parent has composite key
  • Fixed : Json serialization using SuperObject was providing wrong boolean value
  • Fixed : Design-time error using TAureliusDataset when recompiling packages with entities
  • Fixed : Blobs and associations being loaded in lazy mode were causing objects to be updated on flush


  • New : SmartGuid generator allows using identifiers with sequential GUID for better database performance
  • New : RegisterEntity procedure helps registering a mapped class avoiding linker optimization to remove it from application
  • New : Proxy.Available property
  • New : OrderBy attribute allows defining a default order for many-valued associations
  • New : Multi-model design architecture allows different mapping models in a single application with a few lines of code, just by using attributes
  • New : Model attribute to specify the model where the class belongs to
  • Improved : Wrong data for fields OldValue property when dataset is empty
  • Improved : Trailing semi-comma from some PostgreSQL commands were causing errors when using FireDac with automatic record count
  • Improved : More detailed manager error messages when trying to save objects that are already persistent
  • Improved : Incompatibility between TAureliusDataset and FastReport design-time editor
  • Improved : Identity conflict when using MS SQL Server with multiple simultaneous sessions inserting in the same table


  • New : Added Delphi XE7 support


  • New : TObjectManager.Refresh method allows refreshing object state from database
  • New : TFirebirdSQLGenerator.WideStringCharSet property allows defining specific column character set for WideString properties in Firebird
  • New : TDriverConnectionAdapter.Connection property allows referencing the original database component used for the connection
  • New : TCustomJsonDeserializer.Entities property allows retrieving the list of objects created by the JSON deserializer
  • New : TCascadeType.RemoveOrphans allow automatic deletion/removal of child entities on Flush if they are removed from a parent collection
  • New : TBlob.Available property
  • New : ForeignKey attribute to define the name of foreign keys in the database
  • Improved : Merge now can receive objects with no id. This will automatically create a copy of the object and save it. This is a breaking change.
  • Improved : Better performance and memory consumption using unidirectional datasets to fetch data with some specific component adapters
  • Fixed : Error when updating objects with composite id in SQLite and one of id values is null
  • Fixed : Error when serializing a newly created entity (not loaded with manager) with a TBlob property that has not been initialized
  • Fixed : Error when deserializing empty dynamic array properties
  • Fixed : ElevateDB driver compile error when using latest ElevateDB versions


  • New : Delphi XE6 Support
  • Improved : MappedClasses.RegisterClass now checks if the class being registered is a valid entity ([Entity] attribute present)
  • Improved : CascadeTypeAllButRemove constant makes easier to define association cascade with all options except TCascadeType.Remove
  • Fixed : Wrong TAureliusDataset behavior with db visual controls that rely on CompareBookmarks method
  • Fixed : Using [Automapping] attribute with classes that inherit from non-entity classes was causing "Id attribute not found" error


  • New : Support for FireDac components
  • New : Support for Android platform
  • New : Property TIBObjectsConnectionAdapter.Transaction allows you to change the default transaction in an IBObjects connection adapter
  • New : Overloaded constructor for connection component adapters allows easier memory management when using data modules
  • Fixed : TAureliusDataset.Current method was returning an invalid value when it was in insert state.
  • Fixed : TAureliusDataset missing the current record position in some situations
  • Fixed : Memory leak when trying to save unmapped objects.
  • Fixed : "Duplicates not allowed" when retrieving objects in a inheritance tree where different descendant classes had associations with same name


  • New : TCriteria.AutoDestroy property allows keeping TCriteria in memory after objects are retrieved
  • New : RAD Studio XE5 support
  • New : Increased querying capabilities with newTExpression/TLinq methods that allow comparing a projection to any other projection
  • New : Connection driver for XData RemoteDB
  • Fixed : Wrong default values when inserting a record in XE4 with TAureliusDataset
  • Fixed : IBObjects driver now correctly performing statements using IB_Session object specified in the TIBODatabase
  • Fixed : Exception not being raised when calling TClassHierarchyExplorer.GetAllSubClasses
  • Fixed : Error when deserializing a Json array representing an existing object list, when class member was a proxy


  • New : RAD Studio XE4 support
  • New : Full iOS support, including native access to SQLite database
  • Fixed : Wrong example in documentation about lazy-loading associations in distributed applications (proxy loader)
  • Fixed : Schema validation example code in manual
  • Fixed : Not possible to create unique keys referencing columns declared using ForeignJoinColumn attributes
  • Fixed : Merge cascades not being applied correctly
  • Fixed : Error using transactions with IBExpress, IBObjects and DirectOracleAccess components
  • Fixed : Access violation when loading package multiple times in TAureliusDataset design-time editor


  • New : Update Database Schema feature (TDatabaseManager.UpdateDatabase method)
  • New : TSQLiteNativeConnectionAdapter.EnableForeignKeys and DisableForeignKeys methods allow control when foreign keys are enforced in SQLite connections
  • New : TMappingSetup.MappedClasses property allows defining different class entities for different setups
  • New : TDatabaseManager.SQLExecutionEnabled property allows generating scripts to update/create/drop database schema without effectively execute statements
  • New : Detailed Database Schema analysis when updating/validating/creating
  • New : Database Schema validation feature (TDatabaseManager.ValidateDatabase method)
  • Improved : TGlobalConfig.AutoSearchMappedClasses property removed
  • Fixed : Conversion error in TAureliusDataset entity fields when using live bindings


  • New : Support for Unified Interbase (UIB) components
  • Improved : Statements to generate MS SQL Server database structure now explicitly declare NULL constraint when creating fields
  • Improved : Specific conversion issue when retrieving TGuid value from UNIQUEIDENTIFIER fields, using SQL-Direct with server type set to stSQLServer
  • Improved : Retrieving objects (Find) with null id in database now raises an exception instead of just returning a nil instance.
  • Improved : Exception when setting TAureliusDataset.Filtered := true when dataset is active
  • Improved : Error when flushing objects with many-valued-association declared before id fields and which foreign key field had same name as id field
  • Improved : Cascade not being applied when flushing objects with single-valued associations pointing to unmanaged (transient) instances
  • Improved : Auto mapping now automatically includes TColumnProp.NoUpdate in ID column properties
  • Fixed : Uses clause in Direct Oracle Access driver included a wrong unit name
  • Fixed : Error when deserializing Nullable types using JSON deserializer


  • New : Support for Direct Oracle Access components
  • Improved : Updated source code to work correctly when recompiling with Assertions off
  • Fixed : Rare memory leak when using some specific compiler settings (Optimizations=On)
  • Fixed : Memory leak in "Getting Started" demo
  • Fixed : Error using TAureliusDataset.Locate with nullable string fields when there were null fields in dataset


  • New : Full JSON support makes it easy to build distributed applications
  • New : Enumeration field as string now possible in TAureliusDataset by using field name suffix ".EnumName"
  • Improved : TGlobalConfigs.AutoMappingDefaultCascade now split in two different properties for Association and ManyValuedAssociation (breaking change)
  • Improved : IdEq method in TLinq
  • Fixed : TGuid properties and fields were causing occasional errors in Flush method calls


  • New : TCriteria.RemovingDuplicatedEntities allows removing duplicated objects from result list
  • New : Support for FIBPlus components
  • New : Properties Count and PropNames in TCriteriaResult object provides additional info about retrieved projections
  • New : Delphi/C++Builder XE3 support
  • Improved : Possibility to use descendants of TList/TObjectList for many-valued associations
  • Improved : Non-generic TObjectManager.Find method overload accepting a class type as parameter
  • Improved : Better support for other date types (string and julian) in SQLite database
  • Fixed : Memory leak when creating a default TMappingExplorer
  • Fixed : Error when saving collection items belonging to a joined-tables class hierarchy
  • Fixed : Cascade removal was not removing lazy-loaded associations if the associations were not loaded


  • New : TExpression.Sql and TProjections.Sql methods for adding custom SQL syntax to a query, increasing flexibility in query construction
  • New : Support for properties/fields of type TGuid, which are now mapped to database Guid/Uniqueidentifier fields (if supported by database)
  • New : Support for Absolute Database
  • New : Guid, Uuid38, Uuid36 and Uuid32 identifier generators allow client-side automatic generation of GUID and/or string identifiers


  • New : Dynamic properties allows mapping to database columns at runtime connection
  • Improved : TCriteriaResult objects supported in TAureliusDataset
  • Improved : TCriteriaResult object can retrieved projected values by projection alias
  • Improved : TAureliusDataset.Post method now saves object if it's not persisted, even in edit mode
  • Improved : Better validation of MappedBy parameter in ManyValuedAssociation attribute
  • Fixed : Manual Quick Start example updated with correct code
  • Fixed : Issue with association as part of composite id when multiple associations are used in cascaded objects
  • Fixed : Automapping was not correctly defining table name in some situations with inherited classes


  • New : TCriteria.Open method allows returning a cursor for fetching objects on demand
  • New : TBlob.LoadFromStream and SaveToStream methods for improved blob manipulation
  • New : TAureliusDataset.InternalList property allows access to the internal object list
  • New : Support for ElevateDB database server
  • New : Paging query results now supported by using new TCriteria methods Skip and Take
  • New : Paged fetch-on-demand using TAureliusDataset.SetSourceCriteria allows fetching TDataset records on demand without keeping an open database connection
  • New : Fetch-on-demand support on TAureliusDataset, by using SetSourceCursor method
  • New : "Not" operator supported in TLinq expressions and "Not_" method in TExpression
  • Improved : TObjectManager.Find method introduced as an alias for CreateCriteria method for query creation
  • Improved : TCriteria.UniqueResult returns the unique object even if the object is returned in more than one row (duplicated rows of same object)
  • Improved : TCriteria.UniqueResult now returns nil if no objects are returned
  • Improved : NexusDB through UniDac components now supported


  • New : Support for UniDac components
  • New : Fully documented TAureliusDataset component for visual binding objects to data-aware controls
  • Improved : IBObjects adapter now can adapt any TIB_Connection component, not only TIBODatabase ones
  • Improved : Better exception messages for convert error when load entity property values from database
  • Improved : Better error handling with more detailed and typed exceptions being raised at key points, especially value conversion routines
  • Fixed : Memory leak in MusicLibrary demo
  • Fixed : Issue with lazy-loaded proxies using non-id columns as foreign keys
  • Fixed : Issue with SQL statement when using more than 26 eager-loading associations
  • Fixed : Issue when selecting objects with non-required associations and required sub-associations
  • Fixed : Automapping in a subclass in a single-table hierarchy caused issues when creating database schema
  • Fixed : Adding Automapping attribute was not requiring Entity attribute to be declared


  • New : TObjectDataset preview (for registered users only)
  • New : Support for IBObjects components
  • Improved : MusicLibrary demo refactored to use best-designed controllers
  • Improved : Access Violation replaced by descriptive error message when SQL dialect was not found for connection
  • Fixed : Registered version installer sometimes not correctly detecting XE/XE2 installation
  • Fixed : Memory leak is some specific situations with automapped associations
  • Fixed : Memory leak in MusicLibrary demo
  • Fixed : Issue with automapping self-referenced associations
  • Fixed : Default value of OwnsObjects property in TObjectManager changed from false to true (as stated by documentation)
  • Fixed : Component adapter was ignoring explicitly specified SQL dialect

Buy online

TMS Aurelius

for Delphi 2010, XE, XE2, XE3, XE4, XE5, XE6, XE7, XE8, 10 Seattle, 10.1 Berlin, 10.2 Tokyo (Prof/Enterprise/Architect)

View licensing FAQ

Single developer license

license for 1 developer € 195

order now
add to cart

Small team license

license for 2 developers € 295

order now
add to cart

Site license

unlimited developers in the company € 695

order now
add to cart

CreditCards and PayPal Accepted

This product is also available in the following bundle(s):