Гость
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Транзакция по умолчанию / 25 сообщений из 25, страница 1 из 1
07.10.2012, 16:53
    #37987127
Thor234
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция по умолчанию
Здраствуйте.
Возможно ли для соединения определить транзакцию по умолчанию?
Пробовал так:
Код: c#
1.
dbConnection.BeginTransaction(tranOptions);


но при выполнении комманд вываливается исключение, если же коммандам вручную передавать эту транзакцию, то все ок. Но лень...лень матушка заставляет подумать как бы исхитриться, чтобы не определять для каждой комманды транзакцию, а определить транзакцию по умолчанию
...
Рейтинг: 0 / 0
07.10.2012, 20:28
    #37987232
SolYUtor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция по умолчанию
Thor234,

Напишите свой метод расширения, который будет создавать команду с одновременным присвоением ей транзакции.
...
Рейтинг: 0 / 0
08.10.2012, 06:02
    #37987419
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция по умолчанию
TransactionScope ?
...
Рейтинг: 0 / 0
08.10.2012, 10:27
    #37987611
SolYUtor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция по умолчанию
Алексей КTransactionScope ?

Только не забудьте предупредить человека про возможные грабли с распределёнными транзакциями.
...
Рейтинг: 0 / 0
08.10.2012, 12:19
    #37987897
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция по умолчанию
SolYUtorАлексей КTransactionScope ?
Только не забудьте предупредить человека про возможные грабли с распределёнными транзакциями.Проблемы с вложенными транзакциями в "явном" DbTransaction тоже ничё так. :-)
...
Рейтинг: 0 / 0
08.10.2012, 12:37
    #37987946
pation
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция по умолчанию
SolYUtorАлексей КTransactionScope ?

Только не забудьте предупредить человека про возможные грабли с распределёнными транзакциями.

о каких граблях идёт речь?
...
Рейтинг: 0 / 0
08.10.2012, 12:43
    #37987970
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция по умолчанию
pationSolYUtorпропущено...
Только не забудьте предупредить человека про возможные грабли с распределёнными транзакциями.
о каких граблях идёт речь?Ну что он самовольно делает транзакцию распределённой в соответствующих случаях. Независимо от того, хотим мы этого или нет.
...
Рейтинг: 0 / 0
08.10.2012, 12:46
    #37987980
Lelouch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция по умолчанию
pation,

Например, не все провайдеры с ним нормально работают) Насколько я помню, Firebird не поддерживает TransactionScope, во всяком случае в EF он его игнорировал.
...
Рейтинг: 0 / 0
08.10.2012, 13:43
    #37988148
pation
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция по умолчанию
Lelouchpation,

Например, не все провайдеры с ним нормально работают) Насколько я помню, Firebird не поддерживает TransactionScope, во всяком случае в EF он его игнорировал.

если это так, то это проблема Firebird-а, а не TransactionScope-а
...
Рейтинг: 0 / 0
08.10.2012, 13:45
    #37988149
pation
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция по умолчанию
Алексей Кpationпропущено...

о каких граблях идёт речь?Ну что он самовольно делает транзакцию распределённой в соответствующих случаях. Независимо от того, хотим мы этого или нет.

транзакция становится распределённой , действительно автоматически, но причём здесь TransactionScope?
он сделан как раз для того, что бы вы не думали об этом
...
Рейтинг: 0 / 0
08.10.2012, 13:50
    #37988155
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция по умолчанию
pationтранзакция становится распределённой , действительно автоматически, но причём здесь TransactionScope?
он сделан как раз для того, что бы вы не думали об этомЯ бы предпочёл самостоятельно решать, можно начинать распределённую транзакцию или нет. Если нет и она должна начаться - выдавать ошибку.
...
Рейтинг: 0 / 0
08.10.2012, 14:02
    #37988183
SolYUtor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция по умолчанию
pationтранзакция становится распределённой , действительно автоматически, но причём здесь TransactionScope?
он сделан как раз для того, что бы вы не думали об этом
Это фантастика. Думать об этом надо всегда, потому что открыться может в любом неподходящем случае.
Скажем, если у нас два соединения к одной базе - то получи распределённую транзакцию.

1. Бьёт по производительности.
2. Головная боль с администрированием. Должны быть подняты MSDTC, настроены права доступа порты и тд.

Всё это напрасная растрата сил.
...
Рейтинг: 0 / 0
08.10.2012, 14:30
    #37988259
Lelouch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция по умолчанию
pation,

но это одни из граблей, на которые можно настпуить, используя TransactionScope)
...
Рейтинг: 0 / 0
08.10.2012, 14:46
    #37988306
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция по умолчанию
Вообще, в идеале хочется как-то так:
Код: c#
1.
2.
3.
4.
5.
using (var ts = new DbTransactionScope(dbConnection))
{
    ...
    ts.Complete();
}

Но вроде как нет способа определить по DbConnection, что в нём начата транзакция (на случай вложенных DbTransactionScope). Делать 'select @@trancount' не вариант. Делать статический список слабых ссылок на соединения, в которых открыты транзакции, тоже не хочется. Проще смириться с недостатками TransactionScope. :-)
...
Рейтинг: 0 / 0
08.10.2012, 14:55
    #37988336
SolYUtor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция по умолчанию
Алексей К,

Можно использовать ThreadStatic или ThreadLocal, и эмулировать нечто подобное TransactionScope.
...
Рейтинг: 0 / 0
08.10.2012, 15:15
    #37988397
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция по умолчанию
SolYUtorМожно использовать ThreadStatic или ThreadLocal, и эмулировать нечто подобное TransactionScope.Да не. Наверное проще забить на DbTransaction и посылать SQL-команды самостоятельно.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
if @@trancount = 0 begin
    begin tran
    select 1
end else
    select 0

...

commit tran

...

if @@trancount > 0 rollback tran
...
Рейтинг: 0 / 0
08.10.2012, 15:44
    #37988482
pation
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция по умолчанию
Алексей Кpationтранзакция становится распределённой , действительно автоматически, но причём здесь TransactionScope?
он сделан как раз для того, что бы вы не думали об этомЯ бы предпочёл самостоятельно решать, можно начинать распределённую транзакцию или нет. Если нет и она должна начаться - выдавать ошибку.
вы не понимаете о чём говорите, не хотите делать распределённую транзакцию размещайте ваши команды в отдельном скопе
...
Рейтинг: 0 / 0
08.10.2012, 15:46
    #37988487
pation
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция по умолчанию
SolYUtorpationтранзакция становится распределённой , действительно автоматически, но причём здесь TransactionScope?
он сделан как раз для того, что бы вы не думали об этом
Это фантастика. Думать об этом надо всегда, потому что открыться может в любом неподходящем случае.
Скажем, если у нас два соединения к одной базе - то получи распределённую транзакцию.

1. Бьёт по производительности.
2. Головная боль с администрированием. Должны быть подняты MSDTC, настроены права доступа порты и тд.

Всё это напрасная растрата сил.



pationвы не понимаете о чём говорите, не хотите делать распределённую транзакцию размещайте ваши команды в отдельном скопе
...
Рейтинг: 0 / 0
08.10.2012, 15:46
    #37988489
pation
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция по умолчанию
Lelouchpation,

но это одни из граблей, на которые можно настпуить, используя TransactionScope)

пока граблей не увидел
...
Рейтинг: 0 / 0
08.10.2012, 15:51
    #37988509
SolYUtor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция по умолчанию
pationвы не понимаете о чём говорите, не хотите делать распределённую транзакцию размещайте ваши команды в отдельном скопе
Ой ли? Есть код с использованием сторонней библиотеки, которая лезет в базу и что-то туда пишет/читает. И ваш тоже код тоже пишет в базу, может быть даже в другую. И всё это под TransactionScope. Вуаля, распределённая транзакция!
...
Рейтинг: 0 / 0
08.10.2012, 15:53
    #37988516
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция по умолчанию
pationАлексей Кпропущено...
Я бы предпочёл самостоятельно решать, можно начинать распределённую транзакцию или нет. Если нет и она должна начаться - выдавать ошибку.
вы не понимаете о чём говорите, не хотите делать распределённую транзакцию размещайте ваши команды в отдельном скопеДаже с одним скопом и одним конекшеном можно огрести распределённую транзакцию. Оно нам надо?
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
using (var ts = new TransactionScope()) // Распределённая транзакция, здравствуйте!
using (var cn = new SqlConnection("..."))
{
    cn.Open();

    ..........

    ts.Complete();
}



А в этом случае транзакция будет локальной:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
using (var cn = new SqlConnection("..."))
{
    cn.Open();
    using (var ts = new TransactionScope())
    {
        ..........

        ts.Complete();
    }
}
...
Рейтинг: 0 / 0
08.10.2012, 15:53
    #37988517
pation
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция по умолчанию
Алексей КSolYUtorМожно использовать ThreadStatic или ThreadLocal, и эмулировать нечто подобное TransactionScope.Да не. Наверное проще забить на DbTransaction и посылать SQL-команды самостоятельно.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
if @@trancount = 0 begin
    begin tran
    select 1
end else
    select 0

...

commit tran

...

if @@trancount > 0 rollback tran



конешно, а лучше вообще пересесть на ассемблер
...
Рейтинг: 0 / 0
08.10.2012, 15:54
    #37988521
pation
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция по умолчанию
Алексей Кpationпропущено...

вы не понимаете о чём говорите, не хотите делать распределённую транзакцию размещайте ваши команды в отдельном скопеДаже с одним скопом и одним конекшеном можно огрести распределённую транзакцию. Оно нам надо?
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
using (var ts = new TransactionScope()) // Распределённая транзакция, здравствуйте!
using (var cn = new SqlConnection("..."))
{
    cn.Open();

    ..........

    ts.Complete();
}



нет!
...
Рейтинг: 0 / 0
08.10.2012, 16:00
    #37988537
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция по умолчанию
pationАлексей Кпропущено...
Даже с одним скопом и одним конекшеном можно огрести распределённую транзакцию. Оно нам надо?
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
using (var ts = new TransactionScope()) // Распределённая транзакция, здравствуйте!
using (var cn = new SqlConnection("..."))
{
    cn.Open();

    ..........

    ts.Complete();
}



нет!В MSSQL2008 может и нет. А в остальных СУБД - да.

Ещё с DB2 были проблемы - он в принципе не поддерживает простые транзакции через TransactionScope, только распределённые.
...
Рейтинг: 0 / 0
08.10.2012, 16:03
    #37988545
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция по умолчанию
pationАлексей Кпропущено...
Да не. Наверное проще забить на DbTransaction и посылать SQL-команды самостоятельно.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
if @@trancount = 0 begin
    begin tran
    select 1
end else
    select 0

...

commit tran

...

if @@trancount > 0 rollback tran



конешно, а лучше вообще пересесть на ассемблерПричём тут ассемблер. Такая штука пишется максимум за час со всеми бантиками для кроссубдности. А пример прикладного кода я показал выше, практически ничем не отличается от родного TransactionScope.
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Транзакция по умолчанию / 25 сообщений из 25, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]