ORM framework for Delphi with full support for data manipulation, complex and advanced queries, inheritance, polymorphism, and more...
v4.4 (January 30, 2019)Version history
- New : TGlobalConfigs.GetInstance.UseTransactionsInDBManager property provides a global way to control the UseTransactions property in TDatabaseManager.
- New : TDatabaseManager.UseTransactions property allows automatically start/commit of transactions when executing DDL statements.
- New : Support for SAP SQL Anywhere database - former Sybase SQL Anywhere, Adaptative SQL Anywhere (ASA)
- New : Support for NativeDB components (adapter for TASASession).
- Improved : OldColumnValues in OnUpdating/OnUpdated events now includes column values for proxies even when they were not yet loaded.
- Fixed : Workaround a bug in Delphi Rio causing error in deserialization using TDataSnapJsonDeserializer.
- Fixed : TAureliusConnection and UniDac adapter causing "one of the connections in the transaction is not active" error.
- Fixed : It's now possible to have two Aurelius entity class with same name in the same model (e.g, TCity in Unit1 and TCity in Unit2).
- Fixed : Entity generator raising an error when trying to extract schema information from PostgreSQL 11.
- Fixed : Entity generator not working with "INTERBASE" dialect.
- Fixed : TAureliusConnection failing to create a cloned connection for ElevateDB connections.
- Fixed : Entity generation from databases using TAureliusConnection failing on MySQL 8 with error "table 'mysql.proc' doesnt exist".
- New : Support for Delphi 10.3 Rio.
- Improved : AllButRemove is default option for association cascade type when generating entities from database.
- Fixed : TDatabaseManager.ValidateDatabase reporting wrong data type for wide memo fields in DB2.
- Fixed : DBIndexes not being created together when a new table was created.
- Fixed : Error when importing Firebird3 boolean fields even using FIREBIRD3 dialect, when using TAureliusConnection "Generate database entities" design-time option.
- New : TObjectManager.HasChanges allows checking if an specific or all objects in manager have been modified.
- New : MSSQL driver LoginTimeout parameter.
- Improved : TCriteriaResult objects are now editable from the TAureliusDataset.
- Improved : TAureliusDataset.ForceWideTypes forces dataset to create wide string types (widestring, widememo, widefixedchar) for text-based fields.
- Improved : TAureliusConnection design-time settings dialog now responds to Enter and Esc keys.
- Improved : Better error message when trying to use unsupported field/property types in mapped classes.
- Fixed : TAureliusDataset now creates memo/widememo fields when the TBlob property is flagged with DBTypeMemo/DBTypeWideMemo attributes (previously it was blob).
- Fixed : Rare Int64 convert error when importing entities from a MySQL database using a LONGBLOB data type.
- Fixed : JwtAuthDemo memory leak when canceling the insertion of a new record.
- Fixed : Entity generator now adds DBTypeWideMemo for field types in database that are explicit unicode memo fields (NText, NVarchar(max), etc.).
- Fixed : Blob fields not marked as "loaded" when read from AureliusDataset, causing a single lazy blob to be retrieved multiple times when navigating through the dataset.
- Fixed : Better handling of memo fields in TAureliusDataset - TBlob unicode memo raw data is now converted to ANSI data if field type is ftMemo.
- New : TAureliusConnection component. It provides design-time configuration and test of database connection.
- New : Native database drivers for direct database connection. Native Microsoft SQL Server connection (TMSSQLConnection) is now supported.
- New : Generate TMS Aurelius entities from existing database directly from the IDE.
- Improved : Dropped Delphi 2010 and XE support. TMS Aurelius and BCL now supports Delphi XE2 and up.
- Improved : Aurelius connection wizard updated to allow choosing the new native drivers.
- Fixed : Icon in IDE splash screen not appearing.
- Fixed : TAureliusDataset memory leak when a source (criteria, cursor) is specified but the dataset is never open
- New : TObjectManager.DeferDestruction property. Such property prevents immediate destruction of entities removed with Remove method, deferring their destruction to the moment when object manager is destroyed.
- New : TAureliusDataset.FieldInclusions property. This provides more control on what types of fields will be automatically created by Aurelius Dataset. You can choose not to automatically create lists (dataset fields) or objects (entity fields), for example.
- Improved : TCriteria FindByAlias and FindByPath methods allows finding TSubCriteria objects created using CreateAlias or SubCriteria methods.
- Improved : Proxy type now sets internal proxied value to nil when DestroyValue is called.
- Improved : Aurelius DBConnection Wizard using FireDAC now adds FireDac.DApt unit automatically to uses clause.
- Fixed : Entity classes in a single-table hierarchy without DiscriminatorColumn attribute was causing errors when loading entities. Now such classes are being ignored by Aurelius.
- Fixed : DiscriminatorColumn now has default size of 0 (instead of 30) when DiscriminatorType is dtInteger.
- Fixed : DiscriminatorColumn attribute now ignores size parameter (when updating database schema) if discriminator type is not string.
- Fixed : Associations/proxies not loading correctly for inherited classes in a single-table hierarchy.
New : Proxy
- Improved : Significant performance improvement in entity retrieval. Up to 50% of speed gain in some operations, most noticeable when selecting (finding) a high number of entities with high number of properties and associations
- Improved : SQL Server dialect option: WorkaroundInsertTriggers.
- Improved : PostgreSQL generator now supports both Sequence (already supported) and Identity (serial) identifiers.
- Improved : IDBConnectionAdapter interface allows to get the underlying adapted database-access component (TFDConnection, for example).
- Fixed : ManyValuedAssociation attribute documentation was wrongly explaining the option TCascadeType.Lazy
- Fixed : Access Violation in TAureliusDataset when setting property DatasetField at design-time
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 XE2, XE3, XE4, XE5, XE6, XE7, XE8, 10 Seattle, 10.1 Berlin, 10.2 Tokyo, 10.3 Rio (Prof/Enterprise/Architect)
View licensing FAQ
- License for commercial use: Single developer license, Small team license, Site license
- Includes full source code
- Free 1 year updates and new releases
- After 1 year, renewal is offered at 70% discount
- Free priority support through email and forum