Search Results for

    Show / Hide Table of Contents

    Advanced Topics

    Here we present some advanced topics about TMS Aurelius.

    Global Configuration

    TMS Aurelius has a single global class that has some properties for setting global configuration. This class is declared in unit Aurelius.Global.Config, and to access the global configuration object, use TGlobalConfigs.GetInstance:

    uses 
      Aurelius.Global.Config;
    ...
    Configs := TGlobalConfigs.GetInstance;
    

    The following properties are available in the TGlobalConfigs object:

    SimuleStatements: Boolean
    If true, all statements are not executed on the DBMS, but appear in the listeners.

    MaxEagerFetchDepth: Integer
    Indicates the maximum depth to load objects in eager loading associations. Beyond this depth, the objects still load in lazy mode.

    AutoSearchMappedClasses: Boolean
    If true, all classes declared in your application with [Entity] attribute are automatically added to the framework's MappedClasses. Removed in version 2.0: Use TMappingSetup.MappedClasses property instead.

    TightStringEnumLength: Boolean
    If true, in enumerations mapped to string columns with no length specified in the Column attribute will generate the column length equal to the largest possible value of the enumeration. Otherwise, the length is DefaultStringColWidth by default (when not specified in Column attribute).

    AutoMappingMode: TAutomappingMode
    Defines the automapping mode. Valid values are:

    • Off: No automatic mapping. Only elements with attributes are mapped.
    • ByClass: Automapping is done for classes marked with Automapping attribute.
    • Full: Full automapping over every registered class and Enumerations.

    AutoMappingDefaultCascade: TCascadeTypes
    AutoMappingDefaultCascadeManyValued: TCascadeTypes
    If AutoMapping is enabled, defines the default cascade type for all automapped associations (AutoMappingDefaultCascade) and many-valued associations (AutoMappingDefaultCascadeManyValued).
    Default values are:

    AutoMappingDefaultCascade := CascadeTypeAll - [TCascadeType.Remove];
    AutoMappingDefaultCascadeManyValued := CascadeTypeAll;
    

    DefaultStringColWidth: Integer
    Defines the width for string (usually varchar) columns when the width was not particularly specified in Column attribute.

    UseTransactionsInManager: Boolean
    Defines the default value for the TObjectManager.UseTransactions. Default is true, meaning all internal manager operations will be performed with transactions. If you want to disable this (mostly for backward compatibility) for the whole application instead of setting the property for each manager, you can set this property to false.

    UseTransactionsInDBManager: boolean
    Defines the default value for the TDatabaseManager.UseTransactions. Default is false, meaning no transactions will be used to execute SQL statements for creating/updating tables, columns, foreign keys, etc. If you want to enable this for the whole application instead of setting the property for each database manager, you can set this property to true.

    Object Factory

    In several conditions, Aurelius needs to create entity instances. For example, when retrieving entities from the database, Aurelius needs to create instances of those entities. To do that, Aurelius uses an internal object factory. By default, this factory just creates entities by calling a parameter-less constructor named "Create".

    Such mechanism works in most cases. But in the case you want to create your entities yourself (for example all your entities have a Create constructor that need to receive a parameter), you can change the object factory and implement it yourself.

    To do that, all you need is to implement an IObjectFactory interface (declared in unit Bcl.Rtti.ObjectFactory):

    IObjectFactory = interface
      function CreateInstance(AClass: TClass): TObject;
    end;
    

    It has a single method CreateInstance which receives the TClass and must return a TObject which is a new instance of that class.

    Once you have created such instance, you can replace the default one used by Aurelius. You can do it at the TMappingExplorer level, thus changing the factory for everything in Aurelius that is related to that explorer:

    TMappingExplorer.Default.ObjectFactory := MyObjectFactory;
    

    Or you can change it for a TObjectManager object specifically. This gives you more fine-grained control, for example in case your entities need to be created under a specific context:

    Manager.ObjectFactory := MyObjectFactory;
    
    In This Article
    Back to top TMS Aurelius v5.11
    © 2002 - 2022 tmssoftware.com