Доброе время суток.
Просматривал ролик на youtube "LINQ CRUD Operations by linq2db"
Делал все также как и в ролике, за исключением того, что использовал только Oracle.
Все тесты проходят нормально, кроме теста InsertWithIdentityTest. Тест просто зависает, до строчки вывода на консоль не доходит.
Скачал с гитхаба исходики этого примера. Запустил, все работает, зависаний нет.
Но тут одна деталь. Разница версий пакетов.
Погуглил... и ничего не нашел по связке 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);
}
}
Уважаемые создатели библиотеки, а у вас эти тесты проходят нормально? Как решить это "зависание"?
Те же грабли с InsertWithIdentity. Помимо зависания оно еще иногда (хз от чего зависит) отваливается с ошибкой на тему того, что сервер неожиданно разорвал соединение и закрыл сокет (я так понимаю в момент ожидания результата выполнения).
Используйте odp.net.managed, с ним все работает. Другое дело, как дальше быть, оно не официальное и не обновляется, а официальное блин не работает.
Здравствуйте, 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, писали, что пофиксили, не поверил, проверил.
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, Berill, Вы писали:
B>>Уважаемые создатели библиотеки, а у вас эти тесты проходят нормально? Как решить это "зависание"?
IT>Не нормально. Но последний пул реквест это дело успешно лечит.
Спасибо =)
А NuGet package когда примерно будет обновлен?