Data Access 2010.31110

Nov 9, 2010

Telerik OpenAccess ORM Q3 2010 Release Notes (v2010.03.1110)

Enhancements

  • PostgreSql database support. - Support for PostgreSql: http://www.postgresql.org/.
  • Interfaces support in Visual Designer. - The interfaces are part of the Domain Model, the domain classes should be able to implement them and use them as 'Domain Roles'.
  • Linq To Sql converter. - New converter tool that allows conversion of Linq To Sql models (.dbml files) to Telerik OpenAccess ORM .rlinq model.
  • Added support for primitive properties of types Short and GUID in the Visual Designer. - Allow properties of type GUID and Short to be usable as identities in the designer.
  • Display default mapping (provided by our Schema tool) in Visual Designer - The default mapping is calculated by the runtime system, but it included and displayed in the Visual Designer.
  • IntelliTrace integration - Telerik OpenAccess ORM provides support for the IntelliTrace feature of Visual Studio 2010.
  • Visual Designer Table Editor - A table editor control that allows the user to fine tune the forward mapping process for each of the mapped tables. The control is invoked from the schema explorer and the details editor.
  • Full inheritance support in the Visual Designer. - Horizontal inheritance added to the DSL designer. Complex inheritance hierarchies should also be handled correctly. Interfaces should be able to participate in complex inheritance hierarchies.
  • Delimiter support in ADS Sql - The ADS sql is generated without delimiters. This leads to exceptions if the table or column name contains spaces or reserved words. Now the [ and ] is used to surround all names.
  • Named associations in the Visual Designer and OpenAccess ORM metadata - Until now the association types had no name associated with them. This was inconvenient for the users.
  • Individual 'Update From Database'command for each persistent type in the Visual Designer. - Increases usability and gives fine-grain control over the model updates.
  • Support for Many-to-Many relations in the Visual Designer This feature is available in the core but was not presented in the Visual Designer. The user should be able to create a default-mapped many-to-many association by changing the multiplicity of the two association ends to OneMany or ZeroMany.
  • Stored procedure calls that are generated in the context do not contain the schema of the stored procedure. - Stored procedure calls that are generated in the context do not contain the schema of the stored procedure. That does not allow the use of stored procedures that reside in different schemas during runtime.
  • Performance optimization: schema selection option in the Add new item wizard. - The wizard should allow to select which schemas are used instead of reading all of them.
  • Performance optimization: Update From Database is up to 80 times faster than before. - The diff/merge layer was optimized significantly in order to provide better results.
  • Ria Services Wizard: Ability to generate the RIa service directly from .rlinq file. - Instead of compiling the model project, we support direct metadata extraction from an .rlinq file.
  • Enhance attributes tagging so that it covers horizontal inheritance. - Base abstract classes that have horizontal inheritance strategy are not getting tagged with the corresponding attribute.
  • Provide mechanism for dynamically making properties in the dsl read only - Provide mechanism for making properties in the dsl read only through the property pane.
  • Horizontal mapped base class cannot be referenced from a different assembly - If a horizontal mapped base class contains the id or version field for derived classes, the base class must be in the same assembly as the derived classes. If not, the id or version field is not found during the schema update or database open operation.
  • Collections in 1:n and m:n associations should not be managed by default - The managed setting sometimes brings loading the whole collection in memory as a side effect in cases when this is not necessary. When the collection is really big, this causes severe problems, so 'managed' should be an option for the users that want the collections consistent at each moment. This step should be taken for collection containing not more than 100-200 objects.
  • Details editor: Remove the quotes from the table names on the table mappings page of the details editor. - Currently the Fullname of the tables is used, which contains quotes like 'Schema'.'TableName'. The right way of doing it is: Schema.TableName.
  • Provide an option to choose the database schemas used in the 'Update From Database' wizard - Currently all database schemas are read when the Update From Database wizard is invoked. This process could be quite slow when working with large databases. There should be an option in the wizard where the schemas used for the metadata comparison can be filtered by the user.
  • Allow the user to explicitly set which table is a join table - Currently join tables are recognized automatically and this cannot be changed by the user. It should be possible to manually define whether a table acts as a join table by specifying a IsJoinTable property of the MetaTable class.
  • Backend Specific concurrency columns are not recognized as version columns by the default mapping in the DSL - The backend specific version columns and the fields mapped to them(Timestamp) must be tagged with the right concurrency control facets by the default mapping.
  • Support for reading UTC DateTime values - When DateTime values are stored, their Kind property is lost (when not stored into a column that allows to keep this value). Reading back such values will produce instances with Kind=Unspecified. Code has been added to convert the Kind to Utc during read operations.
    You can turn on this feature by specifying <useUTCForReads>true</useUTCForReads> in the backend configuration. You can also specify this with the runtime configuration property UseUTCForReadValues.
  • Name generator should use automatic property names - The name generator generates the column name based on field names. If the field is compiler generated like below automatic properties the generated column name contains '<backing field>'. To make the generated column names more useful the property name should be used as input.
  • The Update Database From Model wizard populates classes to upgrade based on the Update Schema property (MetaPersistentType) - If a class has no table mapped it should by default be in the 'items to update' panel of the Update From Database wizard. This should not have priority over the manually set "should update schema" attribute of a class. Newly created classes without a table(dragged from the toolbox) should have update schema set to true.
  • Fluent Metadata Source should pick up configuration per class. - The fluent metadata source should be able to pick up configurations that are defined in the classes that are mapped. Should only pick up if the class contains an static method that return a MappingConfiguration object.
  • Support for mapping fields in the Fluent Mapping API. - The fluent mapping should provide support for fields. Should only be available if the mapping is defined in a static method in the class as they will pop up in the intellisense.
  • The FluentMetadataSource now validates the field names. - The FluentMetadataSource should check if the field names we have calculated with the fluent mapping actually exist in the clr types.
  • Fluent Mapping should support artificial types and fields. - The fluent mapping should support artificial types and fields. One can create an artificial type using the MappingConfiguration(string namespace, string name) overload of the constructor. Artificial fields can be added using the HasArtificialProperty, HasArtificialPrimitiveProperty, HasArtificialStringProperty. Artificial navigational members can be configured using HasArtificialAssociation, HasArtificialCollectionAssociation.
  • Support for extending containers using the Fluent Mapping API - The second FluentMetadataSource(MetadataContainer container) constructor allow to put in a existing container that can be modified and extended using the Fluent Mapping.
  • Implement a source that can automatically default map all fields defined in a mapping. - The new DefaultMappingSource (that inherits from the FluentMetadataSource) can be used to automatically create mapping for all fields defined and classes, opposed to only the ones exposed through properties as the FluentMetadataSource does.
  • The Fluent Mapping should be able to merge mapping from multiple projects. - The new AggregateMetadataSource can merge configuration from other mapping source and will try to resolving any not resolved item such as references or base types from the other sources.
  • Improvements to the association handling in the Fluent Mapping. - Association can now only be defined on one side of the relation. Introduced support for mapping relationship that only have one end, be it a collection or a reference.
  • Associations should allow to be directly mapped to columns. - Associations should allow to be directly mapped to columns. The ToColumn api is now available with the association. Using this api one can effectively use shared columns.
  • Improvements to the default mapping with the Fluent Mapping API. - Introduced the new IsTransient API for marking fields that should be left unmapped. Also introducing the HasFieldName for explicitly specifying the field name of a property rather than relying on the name generation.
  • New Type Handling system: Handling User Defined Types. - We are able to handle currently a great variety of types provided by the database backends - UDTs, XML, Spatial Data.
  • New Type Handling system: Handling Spatial Data. - We are able to handle currently a great variety of types provided by the database backends - UDTs, XML, Spatial Data.
  • Spatial data support in the Visual Designer. - We can import and process Spatial Data from MS Sql Server in Visual Designer.
  • New Sdk Presentation framework. - A new way of distributing examples and relevant content for the Telerik OpenAccess ORM product (downloadable version).
  • N-Tier examples. - New set of N-Tier examples based on WCF, Ria and Data Services for Telerik OpenAccess ORM. Currently the supported clients are WPF and Silverlight.

Fixes

  • Setting the model name does not update the domain context name. - Setting the model name through the model settings dialog should update the domain context name.
  • Schema migration for Oracle might fail with an SQLException - 'name is already used by an existing object', if the current user has access to other users. - While building a project, OpenAccess tries to migrate the existing database based on the current persistent model. If the current user has access to other users the tables defined by the current user are not detected. This causes 'CREATE TABLE' statements to be executed for each table of the current user even though these tables do exist on the database.
  • Using vertical inheritance strategy with no discriminator column is not possible with a domain model - Using vertical inheritance strategy leads to runtime errors due to a missing discriminator column in the table of the base class.
  • It is not possible to remove associations in the visual designer once they have been created. - When an association between two entities is added, it cannot be removed from the visual designer. This happens because the AssociationDeleteRule class attempts to remove a property as a part of the association before the association is removed. An exception is thrown - "Navigational members can be removed only by removing the respective relationship." - which does not apply in this case.
  • Migration to new domain model fails with NullReferenceException when reversemapping.config does not contain stored procedures - When used on the examples-persistentclasses35 project, the migration fails with an exception because there is unconditional access to certain, possibly non-existing xml nodes.
  • Extra fields in partial classes are not detected as transient - If a database is reverse engineered via domain model, adding an extra field leads to wrong queries or 'slot access' exceptions during runtime. The extra field should be used as transient field and should not extend the database table by a new column. Workaround is to mark this field as [Transient] by adding the attribute.
  • MSSQL: Wrong column length conflict detected when string field is mapped to NTEXT or TEXT - When a string field column is mapped to NTEXT or TEXT, the implicit length of 255 (from the original mapping to varchar) leads to a useless column change conflict; the DB column (ntext/text) has already a length of zero.
  • Artificial Types not usable under Medium Trust - When running under medium trust (IIS high or medium trust settings), the runtime is unable to use artificial types.
  • Failure to execute statement can lead to invalid pooled prepared statements - When the database server throws an exception, the used prepared statement was not removed from the prepared statement pool, causing later usages to fail with an 'invalid prepared statement handle -1' (Mssql) failure.
  • Medium Trust Environments: Unable to work with the DSL generated context classes - Under an altered medium trust environment, an InheritanceDemand was not met, resulting in security exceptions.
  • SqlAnywhere schema migration - The Sql schema migration is not working if columns are added step by step. An create column statement might be created for already existing columns.
  • Enhancer problem if a persistent simple type field calls methods like GetHashCode - If an method is called on a simple type like m_decimal.GetHashCode() and the method is inside a references assembly, the enhancer reports a null reference exception.
  • The metadata is not correctly translated for hierarchical domain models which use attribute mapping. - When a domain model contains classes in an inheritance hierarchy and attribute mapping is used, an exception is thrown at runtime: "There are more than one db-column extensions used, only one is allowed."
  • Enhancer problem with nested classes - If a persistent field is set or read inside a method of an inner class, the call is not intercepted and lazy loading and change tracking is not working.
  • Enhancer does not load referenced assemblies - If an assembly is required by a type in an already referenced assembly the enhancer is not able to load this assembly. An exception that states the assembly that cannot be found is thrown.
  • LINQ: Single() does not throw an exception when more than one element is found - As per specification (http://msdn.microsoft.com/en-us/library/bb155325.aspx) required, the Single() / Single(condition) methods must throw an InvalidOperationException when more than one element is found. Currently, the behavior is like First(), not throwing an exception.
  • Creating artificial types with cyclic references can fail with type load exceptions. - When the type of a field on an artificial type uses another artificial type, TypeLoad exceptions can occur.
  • RIA service does not work if id field is not a value type - If the primary key field is not a value type, but a string or int, the validation during submit changes fails.
  • Reporting designer does not work after recompile - The Telerik Reporting designer shows an exception after rebuild and preview generation. It happens because a new assembly is generated and used but the OpenAccess runtime caches are working with singletons and cannot be refreshed.
  • MSSQL: Mapping nullable timestamp column fails, requiring non-nullable timestamp column - When a timestamp NULL column is reverse engineered from the database, the generated CLR field type of long? leads to a runtime exception. The exception has been removed. The CLR field type should always be non-nullable.
  • ObjectProvider drag-and-drop error with a Spanish VS2010 - Failed to create component 'ObjectProvider', drag and drop creates a SerializationException.
  • Concurrency Control: Failure to detect already deleted objects when using IN statements - When the runtime uses IN clauses during delete (DELETE FROM TableName WHERE Id IN (a,b,c)), the check for non-deletable rows was not performed, leading potentially to incorrect concurrency control behavior.
  • Connection already closed blocks scope - If a scope or context operation returns an connection already closed exception once, the scope or context cannot be used anymore. The connection should be replaced by a new one and it should be possible to continue with the same scope or context.
  • Exception 'No metadata has been registered for class ...' can be thrown when database is physically not opened yet but an object id is to be parsed. - When an stringfield object id is to be parsed before the database is opened and all meta data is processed, an exception could be raised.
  • LINQ: Not-nullable floats not respected in LINQ aggregation with SUM - When a sum over a float column is calculated the linq implementation returns an integer value.
  • The schema API generates tables for reverse mapped views. - The update database from model, tries to create a table with the name of the view.
  • Wrong insert statement generation when a zero value is passed to a smallint column which is part of FK constraint - When 0 is passed to a field of type Int16 which is part of FK constraint later when the insert statement is being generated NULL is passed instead of 0.
    If the corresponding reference is set everything works correctly.
  • OpenAccessDataSource cannot find contexts which are located in assemblies from a different solution. - If you have a compiled assembly with persistent classes and a context (a domain model functionally set up) and the domain model project is in a different solution than the one of the main application, the main application references the assembly of the compiled project but the OpenAccessDataSource doesn't show the context located in the assembly under question.
  • Addin not loaded if user has no admin rights - If OpenAccess is installed under an admin account and is used with a different account without admin rights the addin cannot be loaded.

Telerik Data Services Wizard Q3 2010 Release Notes (v2010.03.1110)

Enhancements

  • Changed path to code generation templates. - Changed templates path. Now the paths are more descriptive.
  • Warning the user if he/she missed the required environment variables for Astoria 2.

Features

  • Silverlight validation controls. - Using standard Silverlight validation.
  • Enable CRUD operations for each entity.
  • Service name validation against language specific keywords.

Fixes

  • Wrong Temp folder location.
  • Missing entities in the wizard grid.
  • Fixes when installing to a non-default installation path.
  • Filtering views for Object scope.
  • Problems when using Website and the generation service already exists in the Website project.
  • Silverlight prerequisites check now work with Visual Studio 2010.
  • Fixed bug when using schema names as namespace for the generated entities.
Have a feature request?

Post your feedback via the Data Access feedback portal or the public forums

What's new across all Telerik products?

See the updates feed

Next Steps

Download for free

Get your fully functional free copy of Data Access.

Get Data Access Sample Kit

Including demos and articles to get you started.

Suggest new features

Help us shape our roadmap.