Published by Marco on 23. Mar 2016 16:13:47
Updated by Marco on 23. Mar 2016 16:14:28

The summary below describes major new features, items of note and breaking
changes. The "full list of issues"

is also available for those with access to the Encodo issue tracker.


  * Lots of bug fixes and improvements for the Winform UI and German
    translations with the release of Punchclock on this version. ("QNO-5162"
    , "QNO-5159"
    , "QNO-5158"
    , "QNO-5157"
    , "QNO-5156"
    , "QNO-5140"
    , "QNO-5155"
    , "QNO-5145"
    , "QNO-5111"
    , "QNO-5107"
    , "QNO-5106"
    , "QNO-5104"
    , "QNO-5015"
  * DateTimeExtensions.GetDayOfWeek() had a leap-day bug ("QNO-5051"
  * Fixed how the hash code for GenericObjects is calculated, which fixes
    sorting issues in grids, specifically for non-persisted or transient objects
    ("QNO-5137" )
  * Improvements to the IAccessControl API for getting groups and users and
    testing membership ("QNO-5133"
  * Add support for query aliases (e.g. for joining the same table multiple times)
  ("QNO-531" ) This changes the
  API surface only minimally. Applications can pass an alias when calling the
  Join method, as shown below,

query.Join(Metadata.Project.Deputy, alias: "deputy")

  You can find more examples of aliased queries in the TestAliasedQuery(),
  TestJoinAliasedTables(), TestJoinChildTwice() defined in the QueryTests
  testing fixture.
  * Add a standalone IQueryAnalyzer for optimizations and in-memory mini-drivers
    ("QNO-4830" )

[Breaking changes]

  * ISchemaManager has been removed. Instead, you should retrieve the interface
    you were looking for from the IOC. The possible interfaces you might need
    are IImportHandler, IMappingBuilder, IPlanBuilder or ISchemaCommandFactory.
  * ISchemaManagerSettings.GetAuthorized() has been moved to
  * The hash-code fix for GenericObjects may have an effect on the way your
    application sorts objects.The IParticipantManager (base interface of IAccessControl) no longer has a
  single method called GetGroups(IParticipant). This method was previously used
  to get the groups to which a user belongs and the child groups of a given
  group. This confusing double duty for the API led to an incorrect
  implementation for both usages. Instead, there are now two methods:

    * IEnumerable GetGroups(IUser user): Gets the groups for the given
    * IEnumerable GetChildGroups(IGroup group): Gets the child groups
      for the given group

  The old method has been removed from the interface because (A) it never worked
  correctly anyway and (B) it conflicts with the new API.