Page 1 of 1

Version 2.50 introduces a lot of breaking changes / bug

Posted: Fri 27 May 2011 12:51
by a_bertrand
I just tried to upgrade to version 2.50 and must say it has been extremely painful. I believe I will rollback to an older version as currently nothing of my code works.

- Importing back a template I wrote was mission impossible, I had to redo the modifications.
- Stored procedures in oracle returns a different type of data, and yet doesn't work anymore correctly either as LINQ produces a nice "Devart.Data.Oracle.OracleException: ORA-22905: cannot access rows from a non-nested table item"
- Some LINQ queries don't work anymore neither as it complains about a null object somewhere in the LINQ statement.

All of those where all fine with 2.20... hope you will fix them.

Posted: Fri 27 May 2011 17:13
by StanislavK
Could you please describe the problems you've encountered with templates and stored procedures in more details? For example, please specify the following:
- the signature of the procedure with which the problem occurred;
- the signature of the corresponding method in the model;
- the scenario in which the error occurred.
If possible, please send us the script needed to create this procedure, and the model with which the problem can be reproduced.

As for the null object reference exception, we have already fixed this error. The fix will be available in the nearest build, which we plan to release next week.

Posted: Mon 30 May 2011 11:47
by a_bertrand
The stored function is:

Code: Select all

  CREATE OR REPLACE FUNCTION GET_COMPLETE_TREE(top in varchar2) RETURN SYS_REFCURSOR
AS
l_data SYS_REFCURSOR;
  BEGIN
	open l_data for SELECT DISTINCT OBJ_TO
FROM INVENT_CONNECTIONS
START WITH OBJ_FROM = top CONNECT BY PRIOR OBJ_TO = OBJ_FROM UNION SELECT top FROM DUAL;
	 RETURN l_data;
  END;
The OBJ_TO column is a string.

Previsouly the LinqConnect function was:
ISingleResult GetCompleteTree(string top);

Now it is:
IQueriable GetCompleteTree(string top);

Anyhow it doesn't work as said due to the following result:

SQL Created:

Code: Select all

SELECT t1.OBJ_TO
FROM TABLE(IV.GET_ALL_CHILDREN(:p0)) t1
Error:

Code: Select all

[OracleException (0x80004005): ORA-22905: cannot access rows from a non-nested table item]
   Devart.Data.Oracle.am.b(Int32 A_0) +291
   Devart.Data.Oracle.ao.d(Int32 A_0) +47
   Devart.Data.Oracle.ao.a(Int32 A_0, f A_1) +1094
   Devart.Data.Oracle.OracleCommand.InternalExecute(CommandBehavior behavior, IDisposable disposable, Int32 startRecord, Int32 maxRecords, Boolean nonQuery) +4303
   Devart.Common.DbCommandBase.ExecuteDbDataReader(CommandBehavior behavior, Boolean nonQuery) +760
   Devart.Common.DbCommandBase.ExecuteDbDataReader(CommandBehavior behavior) +38
   System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader() +12
   Devart.Data.Linq.Provider.DataProvider.ExecuteQuery(CompiledQuery compiledQuery, Object[] parentArgs, Object[] userArgs, Object lastResult) +1530

[LinqCommandExecutionException: Error on executing DbCommand.]
   Devart.Data.Linq.LinqCommandExecutionException.CanThrowLinqCommandExecutionException(String message, Exception e) +79
   Devart.Data.Linq.Provider.DataProvider.ExecuteQuery(CompiledQuery compiledQuery, Object[] parentArgs, Object[] userArgs, Object lastResult) +6196
   Devart.Data.Linq.Provider.DataProvider.ExecuteAllQueries(CompiledQuery compiledQuery, Object[] userArguments) +65
   Devart.Data.Linq.Provider.CompiledQuery.Devart.Data.Linq.Provider.ICompiledQuery.Execute(IProvider provider, Object[] userArgs) +212
   Devart.Data.Linq.DataQuery`1.i() +105
   IvContext.IvDataContext.RetreiveChilds(String top) in C:\Documents and Settings\bertrand\Desktop\SharpInventory\SharpInventory\code\IvContext.cs:31
 
For the template, it could have been incompatible versions of the template? No clues, simply the effect was that there was no generation of CS code until I recreated a new template.

Posted: Mon 30 May 2011 15:45
by StanislavK
We couldn't reproduce the problem with the stored function. I will send you a test project in a letter, please check that it is not blocked by your mail filter. Please specify what should be changed in the sample to reproduce the problem.

As for the templates, we have revised the way they are stored and used in the new version. For more information about these changes, please refer to
http://www.devart.com/forums/viewtopic.php?t=21037
Unfortunately, old templates became incompatible with the new version of Entity Developer. However, it should be possible to merge custom templates with the templates from the new version. Please tell us if you encounter any problems with this.

Posted: Fri 01 Jul 2011 22:17
by gregor
Well, I had same problem regarding:
ORA-22905: cannot access rows from a non-nested table item

After upgrade everything worked until code was regenerated with new template, then I got error.

Solution is that you should change property of function to Pipelined:false (in designer). Then it is regenerated on old way. I think that such procedures cannot be queryable and hence this error, because dotconnect wants to perform operations...

Or if there were option to set default Pipelined to false it would solved everything. It is problem to click all functions and change property.

Posted: Mon 04 Jul 2011 16:52
by StanislavK
Some changes were made in the way Entity Developer builds a model from an .lqml file in the new version. Because of these changes, functions may be mistakenly marked as pipelined when opening old models in the new version of Entity Developer; in this case, such functions would be invoked in an improper way.

To resolve this problem, you may perform one of the following:
- change the Pipelined property of such functions to false in Entity Developer;
- remove the 'IsComposable="True"' entries (or replace them by 'IsComposable="False"') from the .lqml file;
- remove the problem functions from the model and add them again.