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
New : TCriteria.Find
.Open now can be iterated using for..in.
- 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 "libsqlite.so".
- 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
- 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
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
- License for commercial use: Single developer license, Small team license, Site license
- Includes full source code
- Free 2 year updates and new releases
- Free priority support through email and forum