Last modified on August 15, 2012 17:20
This release of DevForce 2010 includes a large number of bug fixes and enhancements.
Breaking changes
- Single sign-on/sign-off by default. This change should not be breaking to most applications, although all developers should be aware of the changed functionality.
- Every EntityManager will now by default use a shared "authentication context". The Authenticator.DefaultAuthenticationContext will be used by any EM whose Options.UseDefaultAuthenticationContext setting is true, which it is by default. The DefaultAuthenticationContext will be automatically set when doing an EM.Login/LoginAsync from an EM with Options.UseDefaultAuthentcationContext set on. If performing a Login/LoginAsync directly on the Authenticator, the application is responsible for setting the DefaultAuthenticationContext. When the DefaultAuthenticationContext is logged out, all EntityManagers using it will be logged out.
- An EntityManager can opt out of this shared context by setting its Options.UseDefaultAuthenticationContext to false, and then logging in as usual. The false setting for this option gives the EntityManager the same functionality as before this release.
- EntityManagers can share a non-default AuthenticationContext: by using the copy constructor, by calling LinkForAuthentication, or by setting the EM.AuthenticationContext. All EMs sharing the context will be considered logged in, and will be logged out when the AuthenticationContext is logged out.
- LoginOperation and LoginEventArgs – The SessionBundle property was removed, replaced by the AuthenticationContext. The AuthenticationContext is returned from a successful asynchronous login operation.
- Implicit login - An implicit login is done by the EntityManager when it is not logged in but needs to contact the EntityServer, for example to perform a query or save. An implicit login is always done without a login credential (a guest login). In the past an implicit login was always attempted if the EM was not logged in; as of this release an implicit login will not be attempted if the EM is logged out (as opposed to never having logged in) and will throw an InvalidOperationException. If this causes problems in your application or test environment, you can either set the DefaultAuthenticationContext to null, or explicitly re-login.
- Several EntityManager signatures were rationalized. These should not be breaking changes unless an application was using Reflection to call them:
- Login(ILoginCredential = null) - The parameter is now optional.
- LoginAsync(ILoginCredential = null, Action<LoginOperation> = null, object userState = null) - Replaces two LoginAsync signatures not using optional parameters.
- LogoutAsync(Action<BaseOperation> = null, object userState = null) - Replaces two LogoutAsync signatures not using optional parameters.
- EntityManager.LinkForAuthentication will no longer throw an exception if the EntityManager is already logged in.
- EntityManager.CancelAsync cannot be used to cancel an asynchronous login or logout request. Use the operation object returned from the asynchronous call instead.
- Security-related EntityManager members and several interfaces have been deprecated, and will now cause compile-time warnings. See features 1904, 1905 and 1914 below.
Defect repairs
- No error message when trying to override DataSourceExtension on the Server. [D1881]
- Removed automatic retry logic after a SaveChanges failure. Previously, a save would be automatically retried for communication failures, such as timeouts. [D1884]
- DevForce OData entities implementation of System.Data.Services.IUpdatable.ResetResource now returns Entity instead of EntityAspect. [D1973]
- Fixed issue where the specification of SaveOptions.EntityTypesExcludedFromPostSaveRefetch would not update the EntityState of the saved but excluded entities after the save completed and the ‘excluded’ entities were not returned in the EntitySavedEventArgs. [D1975]
- The ScalarEntityReference and ListEntityReference IsLoaded property was not being set to true for newly added entities when the addition occurred before EntityMetadata initialization was completed. This could cause an extra lazy load of data where it was not needed. IsLoaded will be set to true for all ScalarEntityReferences on an entity and all ListEntityReferences where the added entity is the ‘principal’ in the relationship. [D1976]
- Uninstall leaves some registry info behind. [D1980]
- Fixed issue where the ‘Principal’ property on a server-side EntityManager was null during the execution of an InvokeServerMethod call. The ‘Principal’ is now set correctly. [D1981]
- EntityQueryPagedCollectionView.MoveCurrentToNext and MoveCurrentToPrevious can throw index out of range exception. Fixed. [D1982]
- Some version control systems automatically write protect the DevForce CodeFirst .ibmmx files. This was causing DevForce’s CodeFirst metadata generation to fail. DevForce now attempts to ‘unprotect’ these files before replacing them. [D1984]
- Fixed issue where calling EntityAspect.RejectChanges would not fire a separate INotifyDataErrorInfo.ErrorChanged notification for every preexisting error on the entity. Previously only a single notification was sent to represent a change to the entire entity. This behavior was not correct according the INotifyDataErrorInfo specification whereas the new behavior is. [D1985]
- Fixed issue where an asynchronous pending entity notification could cause an scalar navigation property to overwrite a subsequent synchronous set of the same property. This would occur when an asynchronous scalar navigation was followed immediately by a set that could be resolved synchronously on the same property. [D1986]
- Fixed a problem where the browser process would not terminate if a Silverlight application had an outstanding subscription to a Push service. [D1987]
- Exclude the EntityFramework.dll from CompositionHost probing. [D1988]
- Allow calling GenerateId on any property that is not a ForeignKey property. This fix is in response to D1946 on DevForce6.1.5 (Disallow calling GenerateId on any non primary key property or on a ForeignKey property even if part of the primary key) which created a breaking change that was not documented. [D1991]
- [Code First] Design time data using Code First entities will now work in Expression Blend. [D1983]
New and improved product features
- Provide single sign-on/sign-off by default within an application. [F1652]. See the security topic for more information.
- CodeSecond generation now adds CodeFirst connection string to the appropriate .config file. [F1760]
- The EntityManager now raises a ConnectionStateChanged event upon connect and disconnect. [F1826]
- Added a new property value called DoNotGenerate to the DevForce Template designer property. Developers can switch to this value if they want to prevent accidental code regeneration. [F1880]
- Copyrights updated to 2012. [F1882]
- The Server side EntityManager.Principal in any EntityServerQueryInterceptor or EntityServerSaveInterceptor is now set to the currently authorized Principal. Previously it was set to null and you would need to access the Thread.CurrentThread.Principal instead. [F1898]
- Installer provides hyperlink to registration page. [F1902]
- EntityQueryPagedCollectionView - CanCancelEdit, CanRemove and IsEmpty properties now fire PropertyChanged. [F1903]
- Deprecate the IEntityManagerAsync API. This API defines Begin/End asynchronous operations on the EntityManager. The API will be removed after 9/1/2012. [F1904]
- Deprecate the IAuthenticationManager API. This API provided applications with a single sign-on feature. It has been deprecated in favor of the new authentication features (see F1652) and will be removed after 9/1/2012. [F1905]
- Register build action to Embedded Resource for ibmmx. [F1908]
- We now support the ability to load and probe (recompose) dynamic DevForce assemblies via the CompositionHost.Add(assemblyCatalog) method. Previously dynamic recomposition was only supported for Silverlight applications. [F1909]
- We have provided public access to DevForce’s ModelMetadataGenerator api and made it callable across app domains. This is a BETA feature and may change in later releases. Further documentation may be found in the DevForce Resource Center. [F1910]
- The Silverlight Business Application templates no longer use the deprecated IAuthenticationManager API. [F1912]
- Updated EULA. [F1913]
- DevForce now manages authentication through the Authenticator and AuthenticationContext classes. Security-related methods on the EntityManager have moved to the new classes (Login, LoginAsync, Logout, LogoutAsync, IsLoggedIn, LinkForAuthentication, Principal, and SessionKey). The original members are deprecated and will be removed after 9/1/2012. [F1914]
- [Code First] Improved trace and error messages for Code First metadata loading. [F1907]