Visual Designer: Name generation for database objects is made configurable - OpenAccess has a name generation mechanism to generate names for various database objects such as tables, columns, constraints, indexes etc. This algorithm does a variety of checks such as handling CamelCasing, checking for reserved words, checking for length etc on the class or field names to generate the object name. The generated name was sometimes difficult to read and very different from it's source (class, field name).
It is now possible for the user to customize this processing or switch it off altogether. A new form is provided for these settings on the Add New Item wizard and as part of the Model Settings dialog.
Fluent API: Backend Independent Type Mapping - An OpenAccess user of the Code Only approach is now able to map the CLR types to database types in a backend independent manner so his model can easily be migrated across backends. An example is a mapping for a Unicode infinite length string, SQL Server needs “nvarchar(max)” as SQL type, Oracle needs “ntext”. An abstract mapping is provided that would be stored in one place and generate the appropirate script for both servers.
Visual Designer: Better error handling for the default mapping - The default mapping process is used to calculate the relational artifacts for a conceptual model. This process can generate various errors if the conceptual model has ambigous mappings. These errors are now visualized in a better way by posting errors in the Error List. The Visual Designer is no longer blocked by such errors and the user can continue defining the conceptual model.
Context API: LookupObjectByKey function added - A function is added in the Context API, checking if an object is loaded in the first level cache of a context. This functionality used to be available only in the IObjectScope API. The new function is LookupObjectByKey<T>(ObjectKey key).
Runtime: Avoid second access to the database server for 1:1 references coming from a fetch plan - When the 1:1 reference cannot be resolved by an outer join, the database used to be accessed for a second time.
Metadata Container: Name generation API is changed - The API for defining naming settings for the default generated database items is changed. The following properties of the NameGenerator in the MetadataContainer are marked as obsolete and replaced:
UseModelNames - marked obsolete, replaced by RemoveCamelCase and ResolveReservedWords
EnforceSimpleNames - marked obsolete
BREAKING CHANGE: PKFieldSuffix is renamed to PKColumnNameSuffix
BREAKING CHANGE: WordBreak is renamed to WordSeparator
BREAKING CHANGE: NameCanStartWithUnderscore is renamed to RemoveLeadingUnderscores
BREAKING CHANGE: Disambiguate is renamed to ResolveDuplicateNames
BREAKING CHANGE: DisambiguateJoinTables is renamed to ResolveDuplicateJoinTableNames
BREAKING CHANGE: DisambiguateConstraints is renamed to ResolveDuplicateConstraintNames
Runtime: BackendConfiguration.ConnectionTimout property is marked as obsolete - The BackendConfiguration.ConnectionTimout property is marked as obsolete as a new API is going to be implemented for the purpose of delayed closing of an inactive database.
DSL: Stored procedures from different Oracle packages could not easily be distinguished - In an Oracle setup where stored procedures with the same name are spread over different packages it was not easily visible in the DSL where the procedure comes from, since the package name is not shown in the Model Schema Explorer or the Update from Database wizard. Now the package name is shown.
Fluent API: Structs that are not explicitly mapped caused issues for the AggregateMetadataSource - Structs that are not explicitly mapped (no columns defined for their properties/fields) could not be used with the Aggregate Metadata Source. Column names were inferred from the persistent type that is using them.
LINQ: Join Table Collection SubQuery could fail when outer owner is accessed - When a join table collection is sub-queried (as part of the filter on the owner), and the sub query accesses the owner fields (besides PK), the resulting SQL was wrong.
LINQ: Filtering on enum properties does not work for Dynamic Linq queries. - Dynamic Linq queries that contain filters based on enum values like:
context.Customers.Where("CustomerType = \"Corporate\"")
were not handled correctly and the generated SQL statement contained the string presentation of the enum constant value instead of the numeric presentation.
LINQ: Filtering on a nullable DateTime property generates wrong SQL in some cases - If the linq expression tree is constructed manually using the classes from the System.Linq.Expressions namespace and contains a node like "Expression.Constant(new DateTime?(someDateTime), typeof(DateTime?))", the DateTime value was not correctly appended to the generated SQL statement, which lead to an error for incorrect syntax.
Validation: Wrong validation error when using Auto Incremental GUIDs in MS SQL - A validation error was wrongly shown when there is a valid auto incremented GUID setup for MS SQL Server 2005+
NuGet: The OpenAccess package was not compatible with package restore - The import statement that is added to the .csproj file was not conditional and in case the packages folder is not available (not checked in) the project was not loadable.
OpenAccessLinqDataSource: The wizard could not find context types if the data source is added to a Web Site project - If an OpenAccessLinqDataSource is added to a page of a Web Site project, the wizard of the data source was unable to find any OpenAccessContext types from the referenced projects.
Setting the context type manually in the aspx markup was the only workaround.
Oracle: Wrong parameter type defined for Date columns - When storing Oracle DATE columns, Telerik OpenAccess ORM used the parameter type System.Data.DbType.DateTime instead of System.Data.DbType.Date
Profiler: The OpenAccess Profiler service fails to start if ASP.NET Compatibility Mode is enabled - The ServiceHostManager.StartProfilerService method could fail if ASP.NET compatibility mode is enabled in the web application, because the default service behavior requires this mode to be disabled. The OpenAccess Profiler service now has the AspNetCompatibilityRequirements attribute defined with RequirementsMode set to AspNetCompatibilityRequirementsMode.Allowed, which allows the service to run with or without the ASP.NET compatibility mode enabled.
Metadata Translation: Properties of type List not handled during runtime - Properties of type List are not handled during runtime. The problem is in the metadata translation layer as it should make sure that these fields are passed to the runtime as List which is a correctly supported collection.
Runtime: "Change of Identity is not supported" was thrown when working with composite primary keys shared with references - A "Change of Identity is not supported" message was thrown in scenarios where a reference is shared with one part of a composite primary key, when trying to add the n object in a 1:n association to the context.
Runtime: After FlushChanges, DirtyObjects still reported the deleted instances as dirty - When FlushChanges() or FlushChanges(false) is performed on the context, the result from Scope.Transaction.DirtyObjects used to report the deleted objects as deleted (modified instances were already removed from the list). The new behavior is made consistent so that deleted objects are no longer returned from DirtyObjects after a FlushChanges.
Runtime: AttachCopy could fail with deserialized, unmanaged instance graphs involving collections - When an object graph is deserialized (e.g. from JSON), the resulting object network could fail with an exception while attaching.
Visual Designer: The default mapping mechanism throwing a System.Exception in some inheritance scenarios - The underlying default mapping mechanism in Visual Designer was throwing a System.Exception when trying to map a class to a table in model that has a collection field in a base class with InheritanceStrategy set to 'Horizontal'
Visual Designer: Field Name not updated correctly when the property is renamed - Field name was not updated automatically when you rename the property in Visual Designer. Now the field name is auto-generated based on the property name, in case the user hasn't renamed the field manually. In case the field is manually renamed, its value is not replaced.
Class name was missing in a certain 1:1 associations exception message - The class name is now shown in the 1:1 associations exception message.
VS 2012 RTM: Telerik OpenAccess Web Application and Telerik OpenAccess Web Site project templates not working - Telerik OpenAccess Web Application and Telerik OpenAccess Web Site project templates were not working with the RTM release of Visual Studio 2012. Now they are fully functional.
VS 2012 RTM: The 'Concurrency Member' and 'Type' property editors can't be resolved in the property grid of the Visual Designer - The custom type editors that provide a combo-box with dynamicly loaded items for the 'Concurrency Member' and 'Type' properties in the DSL Designer could not be loaded in Visual Studio 2012. The result was a black rectangle in the property grid and inability to manage those properties.