Published by Marco on 11. Aug 2017 13:15:01
------------------------------------------------------------------------

The summary below describes major new features, items of note and breaking
changes. The full list of issues is in the release notes below and is available
to those with access to the Encodo issue tracker.

  * "4.0-final"
    
  * "4.0-master3016"
    
  * "4.0-sprint3"
    
  * "4.0-sprint-move-code"
    
  * "4.0-sprint-remove-wrappers"
    

[Highlights]

[Metadata & Modeling]

Most of the existing metadata-building API has been deprecrated and replaced
with a fluent API that is consistent and highly extensible.

  * Improve support for multi-language properties ("QNO-5437"
    , "QNO-5362"
    , "QNO-5481"
    , "QNO-5479"
    , "QNO-5477"
    , "QNO-5469"
    , "QNO-5468"
    , "QNO-5452"
    , "QNO-5290"
    , "QNO-5500"
    , "QNO-5478"
    )
  * Improve metadata API ("QNO-5281"
    , "QNO-5502"
    , "QNO-2901"
    , "QNO-5539"
    , "QNO-5508"
    , "QNO-5579"
    , "QNO-5578"
    , "QNO-5577"
    , "QNO-5575"
    , "QNO-5565"
    , "QNO-5560"
    , "QNO-5559"
    , "QNO-5545"
    , "QNO-5510"
    , "QNO-5493"
    )
  * Improve metadata-modeling for expression-based settings (fail fast)
    ("QNO-5396" , "QNO-5361"
    , "QNO-5358"
    , "QNO-5355"
    , "QNO-5353"
    , "QNO-5453"
    , "QNO-2750"
    , "QNO-5454"
    )
  * Add support for auto-generated metaids ("QNO-5348"
    )
  * No longer allow setting of IMetaProperty.Primary ("QNO-5400"
    )
  * Make wrapper metadata and wrapper lists obsolete ("QNO-5325"
    , "QNO-5408"
    , "QNO-5256"
    )
  * Make IMetaClass.Relations and IMetaClass.Actions auto-managed and read-only
    sequences ("QNO-5402" ,
    "QNO-5400" , "QNO-5400"
    )
  * Renamed IMetaBase.Identifier to IMetaBase.Name ("QNO-5412"
    )
  * Removed I18N module
  * Removed MetaBuilder along with associated metadata builders and extension
    methods.

[UI]

  * Use layouts for all UIs (Web, Winform, WPF) ("QNO-5365"
    , "QNO-5418"
    , "QNO-5382"
    , "QNO-5379"
    , "QNO-5376"
    , "QNO-5359"
    , "QNO-5340"
    , "QNO-5335"
    , "QNO-5470"
    , "QNO-5501"
    , "QNO-4962"
    , "QNO-5413"
    , "QNO-5573"
    )
  * Added a generalized WebAPI and UI with a full-fledged Sandbox implementation
    ("QNO-5472" , "QNO-5471"
    , "QNO-5411"
    )
  * Remove Winform dependency on GlobalContext ("QNO-5050"
    )
  * Improve asynchronous UI support for Winform/WPF ("QNO-5569"
    , "QNO-5563"
    )

[Data]

  * Make GlobalContext obsolete ("QNO-5313"
    )
  * Make IDataSession sticky, by default ("QNO-5018"
    )
  * Replace IMetaReadable and IMetaWritable with IDataObject ("QNO-5429"
    , "QNO-5238"
    , "QNO-4737"
    , "QNO-3043"
    )
  * Improve data-seeding and generation ("QNO-5304"
    , "QNO-5546"
    , "QNO-5589"
    , "QNO-5568"
    , "QNO-5567"
    , "QNO-5566"
    , "QNO-5561"
    )
  * Add single-object saving (instead of whole graph) ("QNO-2525"
    )
  * Remove IDataSession.ActiveDataLanguages ("QNO-5476"
    )
  * Improve default-value setting & handling in GenericObject ("QNO-5583"
    )

[Code-generation]

  * Improve compatibility of generated code with StyleCop/best practices
    ("QNO-5252" , "QNO-5584"
    , "QNO-5515"
    )
  * Add support for integrating interfaces into generated code ("QNO-5585"
    )
  * Finalize support for including generated code in a separate assembly.
    Generated code can now be in a separate assembly from the modeling code.
  * Removed WinformDx code generator ("QNO-5324"
    )

[General]

  * Improve debugging with Quino sources and Nuget packages ("QNO-5473"
    )
  * Improve directory-services integration ("QNO-5421"
    )
  * Reworked the plugins system ("QNO-2525"
    )
  * Improve assembly-loading in tests and tools ("QNO-5538"
    , "QNO-5571"
    )
  * Improve registration API for external loggers; integrate Serilog ("QNO-5591"
    )
  * Improve schema-migration logging ("QNO-5586"
    )
  * Allow customization of exception and message formatting ("QNO-5551"
    , "QNO-5550"
    )

[Breaking changes]

[Metadata & Modeling]

  * The Encodo.Quino.Builders.Extensions namespace has been removed. All members
    were moved to Encodo.Quino.Meta or Encodo.Quino.Builders instead.
  * The assembly Quino.Meta.Standard no longer exists and may have to be removed
    manually if Nuget does not remove it for you.
  * Added default CreateModel() to MetaBuilderBasedModelBuilderBase
  * Added empty constructor to MetaBuilderBasedModelBuilderBase
  * GetSubModules() and GetModules() now returns IMetaModule instead of
    IModuleAspect
  * Even deprecated versions of AddSort(), AddSortOrderProperty(),
    AddEnumeratedClass(), AddValueListProperty() all expect a parameter of type
    IMetaExpressionFactory or IExpressionConstants now.

[Data]

  * The IDataSessionAwareList is used instead of IMetaAwareList
  * Two constructors of DataList have been made private
  * GenericObject.DoSetDedicatedSession() is no longer called or overridable
  * None of the classes derived from AuthenticatorBase accept an IApplication as
    constructor parameters anymore. Instead, use the Application or Session to
    create the authenticator with GetInstance(). E.g. if before you
    created a TokenAuthenticator with this call, new
    TokenAuthenticator(Application), you should now create the
    TokenAuthenticator with Application.GetInstance(). You
    are free also to call the new constructor directly, but construction using
    the IOC is strongly recommended.
  * The constructor for DataSession has changed; this shouldn't cause too many
    problems as applications should be using the IDataSessionFactory to
    construct instances anyway.
  * DataGenerators have changed considerably. Implement the IDataGenerator
    interface instead of using the DataGenerator base class.
  * The names of ISchemaDifference have changed, so the output of a migration
    plan will also be different. Software that depended on scraping the plan to
    determine outcomes may no longer work.
  * Default values are no longer implicitly set. A default value for a required
    property will only be supplied if one is set in the model. Otherwise, a
    NULL-constraint violation will be thrown by the database. Existing
    applications will have to be updated: either set a default value in the
    metadata or set the property value before saving objects.

[Code-generation]

  * The generated filename for builders has changed from "Extensions.cs to
    "Builders.cs". When you regenerate code for the V2 format, you will have
    include the new files and remove the old ones from your project.
  * Data-language-specific properties are no longer generated by default because
    there is no guarantee that languages are available in a given application,
    You can still enable code-generation by calling SetCodeGenerated() on the
    multi-language or value-list property 
  * The generated MetaModelBuilder classes are no longer generated. "QNO-5515"
    

[General]

  * LanguageTools.GetCaption() no longer defaults to GetDescription() because
    this is hardly ever what you wanted to happen.
  * CaptionExtensions are now in CaptionTools and are no longer extension
    methods on object.
  * ReflectionExtensions are now in ReflectionTools and are also no longer
    extension methods on object.

[Expressions]

  * Redeclared Operation<> with new method signature

[Windows-specific]

Some Windows-specific functionality has been moved to new assemblies. These
assemblies are automatically included for Winform and WPF applications (as
before). Applications that want to use the Windows-specific functionality will
have to reference the following packages:

  * For WindowsIdentity-based code, use the Encodo.Connections.Windows package
    and call UseWindowsConnectionServices()
  * For ApplicationSettingsBase support, use the Encodo.Application.Windows
    package and call UseWindowsApplication()
  * For Directory Services support, use the Encodo.Security.Windows package and
    call  UseWindowsSecurityServices().