Сообщение Oracle.ManagedDataAccess.Client и linq2db от 06.09.2015 21:33
Изменено 07.09.2015 6:40 Berill
Доброе время суток.
Просматривал ролик на youtube "LINQ CRUD Operations by linq2db"
Делал все также как и в ролике, за исключением того, что использовал только Oracle.
Все тесты проходят нормально, кроме теста InsertWithIdentityTest. Тест просто зависает, до строчки вывода на консоль не доходит.
Скачал с гитхаба исходики этого примера. Запустил, все работает, зависаний нет.
Но тут одна деталь. Разница версий пакетов.
Мой packages.config
https://github.com/linq2db/examples/blob/master/Video/LinqCrudOperations/LinqToDBCrudDemo/packages.config
Выделил основное (как мне кажется)различие.
Погуглил... и ничего не нашел по связке linq2db + Oracle.ManagedDataAccess... были только пара сообщений, что не получается генерация классов с использованием Т4 шаблонов и этой связки...
В таблицу данные записываются. (Проверял: сперва тест на создание таблиц (он удаляет и создает их заново), потом InsertWithIdentity. В TOAD'е вижу вставленную строчку)
Уважаемые создатели библиотеки, а у вас эти тесты проходят нормально? Как решить это "зависание"?
Просматривал ролик на youtube "LINQ CRUD Operations by linq2db"
Делал все также как и в ролике, за исключением того, что использовал только Oracle.
Все тесты проходят нормально, кроме теста InsertWithIdentityTest. Тест просто зависает, до строчки вывода на консоль не доходит.
Скачал с гитхаба исходики этого примера. Запустил, все работает, зависаний нет.
Но тут одна деталь. Разница версий пакетов.
Мой packages.config
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="linq2db" version="1.0.7.2" targetFramework="net45" />
<package id="linq2db.Oracle.managed" version="1.0.7.2" targetFramework="net45" />
<package id="linq2db.t4models" version="1.0.7.2" targetFramework="net45" />
<package id="NUnit" version="2.6.4" targetFramework="net45" />
<package id="Oracle.ManagedDataAccess" version="12.1.022" targetFramework="net45" />
</packages>https://github.com/linq2db/examples/blob/master/Video/LinqCrudOperations/LinqToDBCrudDemo/packages.config
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="FirebirdSql.Data.FirebirdClient" version="4.6.2.0" targetFramework="net451" />
<package id="linq2db" version="1.0.7.1" targetFramework="net451" />
<package id="linq2db.Access" version="1.0.7" targetFramework="net451" />
<package id="linq2db.DB2" version="1.0.7" targetFramework="net451" />
<package id="linq2db.Firebird" version="1.0.7" targetFramework="net451" />
<package id="linq2db.Informix" version="1.0.7" targetFramework="net451" />
<package id="linq2db.MySql" version="1.0.7" targetFramework="net451" />
<package id="linq2db.Oracle.managed" version="1.0.7" targetFramework="net451" />
<package id="linq2db.PostgreSQL" version="1.0.7" targetFramework="net451" />
<package id="linq2db.SqlCe" version="1.0.7" targetFramework="net451" />
<package id="linq2db.SQLite" version="1.0.7" targetFramework="net451" />
<package id="linq2db.SqlServer" version="1.0.7" targetFramework="net451" />
<package id="linq2db.Sybase" version="1.0.7" targetFramework="net451" />
<package id="linq2db.t4models" version="1.0.7.1" targetFramework="net451" />
<package id="Microsoft.SqlServer.Compact" version="4.0.8876.1" targetFramework="net451" />
<package id="MySql.Data" version="6.9.6" targetFramework="net451" />
<package id="Npgsql" version="2.2.5" targetFramework="net451" />
<package id="NUnit" version="2.6.4" targetFramework="net451" />
<package id="odp.net.managed" version="121.1.2" targetFramework="net451" />
<package id="System.Data.SQLite.Core" version="1.0.96.0" targetFramework="net451" />
</packages>Выделил основное (как мне кажется)различие.
Погуглил... и ничего не нашел по связке linq2db + Oracle.ManagedDataAccess... были только пара сообщений, что не получается генерация классов с использованием Т4 шаблонов и этой связки...
В таблицу данные записываются. (Проверял: сперва тест на создание таблиц (он удаляет и создает их заново), потом InsertWithIdentity. В TOAD'е вижу вставленную строчку)
[Test]
public void InsertWithIdentityTest([Values(ProviderName.Oracle)] string configString)
{
using (var db = new DataConnection(configString))
{
var identity = db.GetTable<TestTable>()
.InsertWithIdentity(() => new TestTable
{
Name = "Crazy Frog",
CreatedOn = Sql.CurrentTimestamp
});
Console.WriteLine(identity);
}
}
[Test]
public void InsertWithIdentityTest2([Values(ProviderName.Oracle)] string configString)
{
using (var db = new DataConnection(configString))
{
var identity = db
.InsertWithIdentity(new TestTable
{
Name = "Crazy Frog"
});
Console.WriteLine(identity);
}
}Уважаемые создатели библиотеки, а у вас эти тесты проходят нормально? Как решить это "зависание"?
Доброе время суток.
Просматривал ролик на youtube "LINQ CRUD Operations by linq2db"
Делал все также как и в ролике, за исключением того, что использовал только Oracle.
Все тесты проходят нормально, кроме теста InsertWithIdentityTest. Тест просто зависает, до строчки вывода на консоль не доходит.
Скачал с гитхаба исходики этого примера. Запустил, все работает, зависаний нет.
Но тут одна деталь. Разница версий пакетов.
Мой packages.config
https://github.com/linq2db/examples/blob/master/Video/LinqCrudOperations/LinqToDBCrudDemo/packages.config
Выделил основное (как мне кажется)различие.
Погуглил... и ничего не нашел по связке linq2db + Oracle.ManagedDataAccess... были только пара сообщений, что не получается генерация классов с использованием Т4 шаблонов и этой связки...
В таблицу данные записываются. (Проверял: сперва тест на создание таблиц (он удаляет и создает их заново), потом InsertWithIdentity. В TOAD'е вижу вставленную строчку)
Уважаемые создатели библиотеки, а у вас эти тесты проходят нормально? Как решить это "зависание"?
upd:
При попытке сделать такое:
вылетает exception:
С примером с гитхаба такого не происходит. Понятно, что тут проблемы в самом Oracle.ManagedDataAccess.Client'е. Может быть, кто-нибудь с таким сталкивался?
Просматривал ролик на youtube "LINQ CRUD Operations by linq2db"
Делал все также как и в ролике, за исключением того, что использовал только Oracle.
Все тесты проходят нормально, кроме теста InsertWithIdentityTest. Тест просто зависает, до строчки вывода на консоль не доходит.
Скачал с гитхаба исходики этого примера. Запустил, все работает, зависаний нет.
Но тут одна деталь. Разница версий пакетов.
Мой packages.config
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="linq2db" version="1.0.7.2" targetFramework="net45" />
<package id="linq2db.Oracle.managed" version="1.0.7.2" targetFramework="net45" />
<package id="linq2db.t4models" version="1.0.7.2" targetFramework="net45" />
<package id="NUnit" version="2.6.4" targetFramework="net45" />
<package id="Oracle.ManagedDataAccess" version="12.1.022" targetFramework="net45" />
</packages>https://github.com/linq2db/examples/blob/master/Video/LinqCrudOperations/LinqToDBCrudDemo/packages.config
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="FirebirdSql.Data.FirebirdClient" version="4.6.2.0" targetFramework="net451" />
<package id="linq2db" version="1.0.7.1" targetFramework="net451" />
<package id="linq2db.Access" version="1.0.7" targetFramework="net451" />
<package id="linq2db.DB2" version="1.0.7" targetFramework="net451" />
<package id="linq2db.Firebird" version="1.0.7" targetFramework="net451" />
<package id="linq2db.Informix" version="1.0.7" targetFramework="net451" />
<package id="linq2db.MySql" version="1.0.7" targetFramework="net451" />
<package id="linq2db.Oracle.managed" version="1.0.7" targetFramework="net451" />
<package id="linq2db.PostgreSQL" version="1.0.7" targetFramework="net451" />
<package id="linq2db.SqlCe" version="1.0.7" targetFramework="net451" />
<package id="linq2db.SQLite" version="1.0.7" targetFramework="net451" />
<package id="linq2db.SqlServer" version="1.0.7" targetFramework="net451" />
<package id="linq2db.Sybase" version="1.0.7" targetFramework="net451" />
<package id="linq2db.t4models" version="1.0.7.1" targetFramework="net451" />
<package id="Microsoft.SqlServer.Compact" version="4.0.8876.1" targetFramework="net451" />
<package id="MySql.Data" version="6.9.6" targetFramework="net451" />
<package id="Npgsql" version="2.2.5" targetFramework="net451" />
<package id="NUnit" version="2.6.4" targetFramework="net451" />
<package id="odp.net.managed" version="121.1.2" targetFramework="net451" />
<package id="System.Data.SQLite.Core" version="1.0.96.0" targetFramework="net451" />
</packages>Выделил основное (как мне кажется)различие.
Погуглил... и ничего не нашел по связке linq2db + Oracle.ManagedDataAccess... были только пара сообщений, что не получается генерация классов с использованием Т4 шаблонов и этой связки...
В таблицу данные записываются. (Проверял: сперва тест на создание таблиц (он удаляет и создает их заново), потом InsertWithIdentity. В TOAD'е вижу вставленную строчку)
[Test]
public void InsertWithIdentityTest([Values(ProviderName.Oracle)] string configString)
{
using (var db = new DataConnection(configString))
{
var identity = db.GetTable<TestTable>()
.InsertWithIdentity(() => new TestTable
{
Name = "Crazy Frog",
CreatedOn = Sql.CurrentTimestamp
});
Console.WriteLine(identity);
}
}
[Test]
public void InsertWithIdentityTest2([Values(ProviderName.Oracle)] string configString)
{
using (var db = new DataConnection(configString))
{
var identity = db
.InsertWithIdentity(new TestTable
{
Name = "Crazy Frog"
});
Console.WriteLine(identity);
}
}Уважаемые создатели библиотеки, а у вас эти тесты проходят нормально? Как решить это "зависание"?
upd:
При попытке сделать такое:
[Test]
public void InsertWithIdentityTest([Values(ProviderName.Oracle)] string configString)
{
using (var db = new DataConnection(configString))
{
var identity = db.GetTable<TestTable>()
.InsertWithIdentity(() => new TestTable
{
Name = "Crazy Frog",
Desciption = "somerhrhr",
CreatedOn = Sql.CurrentTimestamp
});
Console.WriteLine(identity);
}
}вылетает exception:
Oracle.ManagedDataAccess.Client.OracleException : ORA-00904: "DESCIPTION": недопустимый идентификатор
в OracleInternal.ServiceObjects.OracleCommandImpl.VerifyExecution(OracleConnectionImpl connectionImpl, ref Int32 cursorId,
Boolean bThrowArrayBindRelatedErrors, ref OracleException exceptionForArrayBindDML, ref Boolean hasMoreRowsInDB, Boolean bFirstIterationDone)
в OracleInternal.ServiceObjects.OracleCommandImpl.ExecuteNonQuery(String commandText, OracleParameterCollection paramColl,
CommandType commandType, OracleConnectionImpl connectionImpl, Int32 longFetchSize, Int64 clientInitialLOBFS,
OracleDependencyImpl orclDependencyImpl, Int64[]& scnFromExecution, OracleParameterCollection& bindByPositionParamColl,
Boolean& bBindParamPresent, OracleException& exceptionForArrayBindDML, Boolean isFromEF)
в Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteNonQuery()
в LinqToDB.Data.DataConnection.ExecuteNonQuery() в i:\linq2db\Source\Data\DataConnection.cs: line 626
в LinqToDB.Data.DataConnection.LinqToDB.IDataContext.ExecuteScalar(Object query) в i:\linq2db\Source\Data\DataConnection.Linq.cs: line 244
в LinqToDB.Linq.Query`1.ScalarQuery(IDataContextInfo dataContextInfo, Expression expr, Object[] parameters) в i:\linq2db\Source\Linq\Query.cs: line 332
в LinqToDB.Linq.Query`1.<SetScalarQuery>b__10<TS>(QueryContext ctx, IDataContextInfo db, Expression expr, Object[] ps) в i:\linq2db\Source\Linq\Query.cs: line 320
в LinqToDB.Linq.ExpressionQuery`1.System.Linq.IQueryProvider.Execute(Expression expression) в i:\linq2db\Source\Linq\ExpressionQuery.cs: line 142
в LinqToDBCrudDemo.Tests.InsertWithIdentityTest(String configString) в Tests.cs: line 131
DataConnection: -- Oracle
DECLARE @IDENTITY_PARAMETER Decimal
SET @IDENTITY_PARAMETER = NULL
INSERT INTO TestTable
(
Name,
Desciption,
CreatedOn
)
VALUES
(
'Crazy Frog',
'somerhrhr',
CURRENT_TIMESTAMP
)
RETURNING
ID INTO :IDENTITY_PARAMETER
DataConnection:
Exception: Oracle.ManagedDataAccess.Client.OracleException
Message : ORA-00904: "DESCIPTION": недопустимый идентификатор
в OracleInternal.ServiceObjects.OracleCommandImpl.VerifyExecution(OracleConnectionImpl connectionImpl, Int32& cursorId,
Boolean bThrowArrayBindRelatedErrors, OracleException& exceptionForArrayBindDML, Boolean& hasMoreRowsInDB, Boolean bFirstIterationDone)
в OracleInternal.ServiceObjects.OracleCommandImpl.ExecuteNonQuery(String commandText, OracleParameterCollection paramColl,
CommandType commandType, OracleConnectionImpl connectionImpl, Int32 longFetchSize, Int64 clientInitialLOBFS,
OracleDependencyImpl orclDependencyImpl, Int64[]& scnFromExecution, OracleParameterCollection& bindByPositionParamColl,
Boolean& bBindParamPresent, OracleException& exceptionForArrayBindDML, Boolean isFromEF)
в Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteNonQuery()
в LinqToDB.Data.DataConnection.ExecuteNonQuery() в i:\linq2db\Source\Data\DataConnection.cs:строка 595С примером с гитхаба такого не происходит. Понятно, что тут проблемы в самом Oracle.ManagedDataAccess.Client'е. Может быть, кто-нибудь с таким сталкивался?