OpenAccess Profiler - The OpenAccess Profiler is a standalone application exposing the behavior of the lower layers of OpenAccess by displaying log data in an appropriate visual manner. The information can be loaded from log files or directly read from a running OpenAccess-based application. The OpenAccess Profiler has an analysis engine, able to detect problematic or low-performing areas in the application related to the way OpenAccess is used. Various metrics can be used to derive the health of a running application by analyzing the database throughput as well as the scalability.
Domain Context Wizard and Visual Studio templates - Implemented a new wizard which allows the user to generate a standalone domain context class based on a domain model (in a different VS project). The domain model could be present in the project where the new context is added or in any other referenced project. The user should be able to choose which endpoints are generated in the context class, depending on the domain classes available in the model.
RIA Domain Service Wizard The domain service wizard has been completely reworked. It now allows adding domain services from fluent metadata sources (no context required). It also allows adding services from .rlinq xml file (VS project) or an OpenAccess context. The wizard has been redone using WPF.
LINQ (Firebird): Use ColumnAlias for GroupBy - Support for using the ColumnAlias for GroupBy has been added to the runtime.
LINQ: Improved support for Min/Max/Sum/Avg/Count aggregates in filter conditions - LINQ expressions like
var rows = from vp1 in Scope.Extent<Northwind.OrderDetail>()
from v in Scope.Extent<Northwind.Order>()
where vp1.OrderID == v.Id && vp1.ProductID != Scope.Extent<Northwind.OrderDetail>().Where(x => x.OrderID == v.Id).Max(x => x.ProductID)
select vp1;
are now handled correctly.
Server side paging support for Postgres and SqlAnywhere - Postgres and SqlAnywhere both support server side support for paging queries now.
Using ODP.net as only driver for Oracle - The default ADO driver to be used for Oracle databases has been changed to ODP.NET (the Oracle provided driver). The reason for this is that the .NET framework built-in Oracle driver (the managed parts of it) are marked as obsolete by Microsoft, and in order to use it customers have to install an Oracle client anyway.
LINQ: Handling for ordering on constants - Handling for ordering on constants has been added to the LINQ implementation.
Sql Server Compact Edition 4.0 support - Microsoft has a new version of Sql Server Compact Edition. This version is pure managed and xcopy deployable. OpenAccess has to support this better engine.
Sql Server Compact Edition 4.0 support: Added Support for Paging in Sql Server Compact Edition 4.0 - Support for Paging in Sql Server Compact Edition 4.0 has been added to the runtime.
L2S Converter: Make the converter available for Visual Studio 2008 - Make the Linq to Sql converter available for Visual Studio 2008.
LINQ: Added Support for DateTime.DayOfWeek - Support for using the DateTime.DayOfWeek property has been added to the runtime and LINQ implementation.
MSSQL: Support for sql_variant - Support for the sql_variant SQL type has been added; the mapped fields CLR type is object.
Attributes Mapping: Add Cache Strategy Attribute - There is missing functionality in the area of the attributes mapping source: Specifying the cache strategy for a class with an attribute is not possible. We should include a new attribute and add the proper logic for its applying.
Developing ADO-style API for OpenAccess/RLINQ - This item channels all efforts required to implement Ado.Net compatible API similar to what other O/R tools have.
It includes Connection, Reader, Command, ConnectionStringBuilder implementations.
LINQ: Support for == new Guid("stringconstant") in where clauses - Support for expressions like new Guid("stringconstant") was added for LINQ.
SDK: Add requirement checking whether SQL Server has been installed. - Add requirement checking whether sql server 2005 or greater has been installed.
Oracle: Using NCLOB with Unicode data fails - When Unicode strings are stored in an NCLOB, the data was passed as CLOB.
Deployment: Removed Adonet2 assembly. - The Adonet2 assembly has been removed from the product and the functionality is merged into the runtime assembly. You do not need to deploy the assembly any longer.
Deployment: Added the Common.UI assembly. - The base code of all UI-related components used by the visual designer has been moved to a separate assembly - Telerik.OpenAccess.Common.UI . It is required by the installed product.
LINQ: Improve projections for better performance and completeness - Projections are now using compiled code instead of relying on reflection.
Runtime: ADO.NET driver loading uses standard .NET mechanisms now. - The ADO.NET drivers for the various database backends now uses the standard .NET mechanisms for drivers.
Oracle: Equality comparison of blob/clob columns now uses dbms.lob_compare(column,param) = 0 instead of simple = - When a clob/blob column is to be compared for equality, the lob_compare() method is now used.
Oracle: Connection Strings using the System.Data.OracleClient are redirected to the Oracle.DataAccess.OracleClient (ODP.NET) -
When the deprecated .NET Oracle Client from Microsoft is referenced in the connection string attribute providerName, the value is replaced silently to Oracle.DataAccess.OracleClient, which is the provider name for the Oracle ODP.NET client.
Added CacheStraetgyAttribute - Until now it was not possible to specify the cache strategy for a class if attribute mapping is used. The CacheStrategy attribute was introduced in order to allow specifying the 2nd level cache options for classes mapped with attributes.
MySql: Implemented preliminary support for LONGTEXT with additional settings (codeset, collation) - Preliminary support for LONGTEXT column modifications is now included, so that sql type specifications like "
LONGTEXT CHARACTER SET utf8 COLLATE utf8_general_ci" are possible.
What remains to be done: Detection and handling of changes in the character sets, collations, etc. (whatever is specified after the LONGTEXT).
Fixes
Fluent: Fixed field name generation when using multiple levels of Horizontal inheritance - The algorithm used for calculating the field names of the most derived members is a greedy one and does not cover all scenarios. We should add one using recursion to make sure that all of the field names are generated correctly.
Fluent: Fixed AsTransiend() for properties with no field behind them - When a property that has no field behind it is marked it as transient a FieldNotFound exception is thrown.
Fluent: We are now able to resolve columns for navigational members with the same name if the table is not specified - The fullname/key of a meta column is derived from the property that is mapped to, however in the case of association this cannot be easily resolved. Then the full name should be just the name (as one will be specified) prefixed with the table name. However if there is no name we should use a moniker for the table and thus get a real name.
Fluent: Mapping on subclasses in a horizontal inheritance hierarchy is ignored and the default mapping is used. - Table/column mapping can be specified for a subclass ,in a horizontally mapped inheritance hierarchy, via the Fluent API. This mapping, however, is not reflected in the generated SQL for creating the tables/columns. The tables/columns are created using the default generated values for column name, column type, etc.
Fluent: Fixed Globalization problems with the Turkish letter "I" - If the current culture is set to Turkish, and a property's name contains a capital "I" the field name is calculated to have a lower "i" with a small Turkish 'i' that is not available in the actual class.
Fluent: Fixed merging when concurrency control has been specified - The default for optimistic concurrency control in the metadata container is specified as Changed and it should be Default as it is in the FluentMetadataSource; this leads to an exception in the merging algorithm as this is found out to be merging two attributes with explicit values.
Artificial Types: Duplicate generation of an id property should be avoided - When an id property is declared through the fluent mapping for an artificial type, this id is only denoting the base type to be used and should not be generated again as this would lead to an id property in the artificial base type and in the artificial type.
SDK: Improved error message when an examples is ran on a machines without SQL server - When the SDK is installed on a machine without SQL server and an example is ran the following error is seen: Value cannot be null. Parameter name: source
SDK: Fixed database selection when the server name has been changed - Whenever we change the Server name the Database is cleared and there is no way to change it back.
SDK: Fixed crash where the SDK is closed after the Blogs section has been opened. - If the blogs section of the SDK has been opened and the SDK is closed you see an error: This program requires a missing Windows Component. This program requires flash.ocx, which is no longer included in this version of windows. (This happens on orm-win7 - 32b virtual pc).
SDK: In the Database Management Tool the default shown path to the database contains incorrect symbol. It will contain this '/' instead of this '\' - SDK - install SDK on a folder different from the default one. Select one example and click Run Example. Database Management Tool will show. The shown path to the database will not be correct. It will contain this '/' instead of this '\'. For example: it will show this "C:\SDK\ProductSdk\Content/DatabaseData" instead of this"C:\SDK\ProductSdk\Content\DatabaseData".
SDK: Fixed path in the Database Tool Management Tool the default shown path to the database contains incorrect symbol. It will contain this '/' instead of this '\' - SDK - install SDK on a folder different from the default one. Select one example and click Run Example. Database Management Tool will show. The shown path to the database will not be correct. It will contain this '/' instead of this '\'. For example: it will show this"C:\SDK\ProductSdk\Content/DatabaseData" instead of this"C:\SDK\ProductSdk\Content\DatabaseData".
Postgres: SERIAL/BIGSERIAL columns are now handled as AUTOINC per default if they are used by a non-default schema - When a non-default schema defines a table with a serial/bigserial column, this column is not detected as autoinc per default.
Postgres: Fixed VARCHAR column length migration - When the length of a VARCHAR columns is modified, the resulting update DDL statement does not write the length information correctly.
Postgres: Schema change is wrongly detected for char(x) columns - When a character(12) column is written to the database, the same column was returned as bpchar(12), which causes a false column difference to be detected. This could lead to an incorrect ALTER COLUMN DDL statement.
Postgres: New instances can now be added to tables in a non-default schema with a 'serial' primary key column. - Committing a new instance of a class mapped to a table in the non-default schema failed with an exception.
Postgres: The default schema for a PostgreSQL database is now properly detected in case a search_path is specified - The schema reader was not able to detect the default schema if the 'search_path' variable has a schema other than 'public' as first in the list.
Postgres/Oracle: When using pessimistic locking, invalid FOR UPDATE statement can be generated when GROUP BY is present - When group by is present in a query that is executed against an Oracle or Postgres server and pessimistic locking is used, the generated SQL includes a FOR UPDATE clause that is not permitted.
Oracle: When NLS_COMP=LINGUISTIC is used, database schema retrieval can fail - When linguistic comparison is turned on for a particular database (or session), the schema retrieval process can fail with a Oracle message similar to ORA-9004: "O"."NAME" identifier not found.
Oracle: Unicode characters are now correctly inserted in nchar columns - The store call to a char(1) column does not insert Unicode character.
Oracle: Support for NCLOB inequality comparison - When using NCLOB columns, such columns must be compared with the dbms_lob package compare function.
Oracle: Fixed inability to store Unicode string data - When Unicode values are to be stored into NVARCHAR2 columns, the values were not stored correctly.
MySQL: Failure to read stored procedure parameters when user defined function is present in another database - Due to an issue with the MySQL ADO driver, the first stored procedure parameter is not obtainable from the ADO driver when a user defined function exists on another database on the same server.
MSSQL: Avoiding potential runtime issues where the database server cannot find a prepared statement handle. - At seemingly random intervals the MSSQL server can return a 'cannot find prepared statement handle -1' error. In addition to verifying that the connection is still active, OpenAccess empties now the prepared statement cache on that connection to avoid such problems.
MSSQL: When multiple indexes with the same name exist within a MS SQL server database, the schema read module does not read the indexes correctly - In MS SQL Server, if a database has more than one index with the same name (in different tables) the schema reader does not read the index information correctly. This resulted in the wrong number of indexes being created with ambiguous information.
MSSQL: SqlGeometry and SqlGeography columns cannot be compared with = operator and therefore are now excluded from concurrency control - A geometry/geography column cannot be compared with = and such columns are no longer used for concurrency control.
OData: WCF Data Services - LINQ expression fails when $expand is used with collection property - An OData request of form Orders(10248)?$expand=OrderDetails translated into LINQ is not properly processed by OpenAccess.
OData: WCF Data Services - LINQ expression fails when $expand with deep references are used - An OData request of form Orders(10248)?$expand=Employee/ReportsTo translated into LINQ is not properly processed by OpenAccess.
OData: WCF Data Services - LINQ expression fails when $select with simple field is used - An OData request of form Categories(1)?$select=CategoryName translated into LINQ is not properly processed by OpenAccess.
Object container copy to throws cast exception - If an object with shared fields gets a new base type assigned to the shared field, the CommitChanges or CopyTo can throw an class cast exception. If the container is used, setting both the id and reference field is recommended.
LINQ: Using constants of user defined base types (SqlGeography) leads to invalid cast exceptions - When constants of SqlGeography are used in LINQ expressions, the translation needs to treat them as parameters, otherwise invalid cast exceptions are thrown.
WCF RIA Services: Failure to handle concurrency modes ALL and DEFAULT properly - When the All or Default mode are used for Concurrency Control, the required round trip attributes are not generated, leading to missing values that generate false concurrency control conflicts.
WCF RIA Services: Updating a byte[] fails with index exception - When updating a byte[] field, an index exception can be thrown while checking for changes.
A self-referencing association with a shared field is not inserted correctly. - Whenever we try and add a chain of self-referencing objects by only adding the first one to the context we get incorrect data inserted.
LINQ: Incorrect handling of collection projections - Collection field projection could lead to IQueryable<X> where a IQueryable<IList<X>> should have been returned.
LINQ: Using a property of interface type not possible even when the property backing field is of persistent type that just implements the non-persistent interface - When using something like
class Product {
public IVendor TheVendor { get { return vendor; } }
}
class Vendor : IVendor {
}
and setting up the meta data correctly, LINQ expressions similar to 'from p in ctx.Products where p.TheVendor.Id == param' fail as the returned interface type of the property is not handled correctly.
LINQ: When the SQL extension method is used, included parameters are now handled correctly - When the SQL extension method is used, the parameters that are passed (and referenced symbolically) are not handled correctly, this affects situations where more than one parameter is present in the query.
LINQ: Fixed translation of String.Length under certain circumstances - When an expression like 'from x in db.Persons where x.Name.Length > paramInt select x' is made, the translation of the String.Length property fails with an exception produced by the type converter for the parameter expression.
LINQ: Handling of queries that involves nullable bool fields can lead to incorrect SQL - When a nullable bool field is compared with a boolean value, the resulting SQL can be incorrect.
LINQ: Handling of string.StartsWith/EndsWith/Contains for fixed size char(x) and nchar(x) columns is now correct for non-constant arguments - When fixed size char(x) and nchar(y) columns are used for LINQ expressions string.EndsWith, string.Contains and string.StartsWith, the returned results were not correct as the passed string parameter (not a constant) was appended with spaces.
Execute SQL Select statement with disabled ForwardsOnly setting leads to an exception - Executing an SQL statement via IObjectScope.GetSqlQuery(string,Type,string) and setting ForwardsOnly=false on the result lead to an exception.
BackendConfigurationSettings: Parsing the IsolationLevel setting leads to InvalidCastException
Fixed ADS data migration - Migrating the data to a varchar column is now possible. The upgrade ddl script contained a convert to varchar instead of SQL_VARCHAR function.
Firebird: Blob subtype 1 is now correctly mapped to string - When a column with blob subtype 1 or with a domain using this type is mapped, it was mapped to byte[], when it should have been mapped to string.
Runtime: When the database server is temporarily down, a stale connection can be used for longer than it should be - When the database server connection gets broken, the storage manager and the connection pool could still hold and give out stale connections. This could lead to more exceptions even when the server is available again.
Runtime: Attempting to delete items from a managed collection throws an exception when the collection is maintained by an inverse reference field and the inverse field shares a PK column with another field. -
When an item from a managed collection is deleted (via scope.Remove), the runtime attempts to reset the inverse reference field of this item (if the collection is maintained via an inverse field and not a join table). If this inverse reference field is mapped to a PK column an exception was thrown with the message - Change of identity is not supported.
The Add Domain Model wizard now correctly filters the ODP.NET connections. - The wizard no longer filters connections created with the Oracle Data Provider. Connections created with the standard Microsoft Oracle client or the Oracle Data provider are now shown in the Setup Database Connection page of the wizard together.