Oracle.ManagedDataAccess.Client и linq2db
От: Berill Азербайджан  
Дата: 06.09.15 21:33
Оценка:
Доброе время суток.
Просматривал ролик на 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);
            }
        }


Уважаемые создатели библиотеки, а у вас эти тесты проходят нормально? Как решить это "зависание"?
Отредактировано 07.09.2015 6:51 Berill . Предыдущая версия . Еще …
Отредактировано 07.09.2015 6:40 Berill . Предыдущая версия .
linq2db oracle.manageddataaccess
Re: Oracle.ManagedDataAccess.Client и linq2db
От: AK107  
Дата: 07.09.15 18:23
Оценка:
Здравствуйте, Berill, Вы писали:

Те же грабли с InsertWithIdentity. Помимо зависания оно еще иногда (хз от чего зависит) отваливается с ошибкой на тему того, что сервер неожиданно разорвал соединение и закрыл сокет (я так понимаю в момент ожидания результата выполнения).

Используйте odp.net.managed, с ним все работает. Другое дело, как дальше быть, оно не официальное и не обновляется, а официальное блин не работает.
Отредактировано 07.09.2015 18:25 AK107 . Предыдущая версия .
Re[2]: Oracle.ManagedDataAccess.Client и linq2db
От: Berill Азербайджан  
Дата: 07.09.15 20:59
Оценка:
Здравствуйте, AK107, Вы писали:

AK>Здравствуйте, Berill, Вы писали:


AK>Используйте odp.net.managed, с ним все работает. Другое дело, как дальше быть, оно не официальное и не обновляется, а официальное блин не работает.


Да вроде, работает официальное:
using System;
using System.Data;
using Oracle.ManagedDataAccess.Client;
using Oracle.ManagedDataAccess.Types;

namespace OracleManagedDataAccess
{
    class Program
    {
        static void Main(string[] args)
        {
            using ( var conn = new OracleConnection(
                    "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL)));" +
                    "User id=TestUser;Password=TestPassword")
            )
            {
                conn.Open();

                string sqlString = "INSERT INTO TESTTABLE (NAME) VALUES ('SomeString') RETURNING ID INTO :p_ID";

                var cmd = new OracleCommand(sqlString, conn);
                var returnParam = cmd.Parameters.Add("p_ID", OracleDbType.Decimal, ParameterDirection.ReturnValue);

                try
                {
                    cmd.ExecuteNonQuery();
                    if (returnParam.Value is OracleDecimal)
                        Console.WriteLine("Inserted ID : {0}", (OracleDecimal) returnParam.Value);
                    else
                        Console.WriteLine(returnParam.Value.GetType().FullName);
                }
                catch (Exception exception)
                {
                    Console.WriteLine(exception.Message);
                }
            }

            Console.ReadKey();
        }
    }
}


нагуглил сообщения о багах с decimal в ManagedDataAccess, писали, что пофиксили, не поверил, проверил.
Re: Oracle.ManagedDataAccess.Client и linq2db
От: IT Россия linq2db.com
Дата: 07.09.15 21:11
Оценка:
Здравствуйте, Berill, Вы писали:

B>Уважаемые создатели библиотеки, а у вас эти тесты проходят нормально? Как решить это "зависание"?


Не нормально. Но последний пул реквест это дело успешно лечит.
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: Oracle.ManagedDataAccess.Client и linq2db
От: Berill Азербайджан  
Дата: 07.09.15 21:34
Оценка:
Здравствуйте, IT, Вы писали:

IT>Здравствуйте, Berill, Вы писали:


B>>Уважаемые создатели библиотеки, а у вас эти тесты проходят нормально? Как решить это "зависание"?


IT>Не нормально. Но последний пул реквест это дело успешно лечит.


Спасибо =)
А NuGet package когда примерно будет обновлен?
Отредактировано 07.09.2015 21:40 Berill . Предыдущая версия .
Re[3]: Oracle.ManagedDataAccess.Client и linq2db
От: IT Россия linq2db.com
Дата: 07.09.15 22:56
Оценка:
Здравствуйте, Berill, Вы писали:

B>Спасибо =)


Кстати, чей пул-реквест?

B>А NuGet package когда примерно будет обновлен?


Да хоть прамо сейчас.
Если нам не помогут, то мы тоже никого не пощадим.
Re[4]: Oracle.ManagedDataAccess.Client и linq2db
От: Berill Азербайджан  
Дата: 07.09.15 23:19
Оценка:
Здравствуйте, IT, Вы писали:

IT>Здравствуйте, Berill, Вы писали:


B>>Спасибо =)


IT>Кстати, чей пул-реквест?


Не знаю. Я это слово, вообще, второй раз в жизни читаю.

B>>А NuGet package когда примерно будет обновлен?


IT>Да хоть прамо сейчас.


Еще раз спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.