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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

Можно использовать ThreadStatic или ThreadLocal, и эмулировать нечто подобное TransactionScope.
...
Рейтинг: 0 / 0
Транзакция по умолчанию
    #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
Транзакция по умолчанию
    #37988482
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кpationтранзакция становится распределённой , действительно автоматически, но причём здесь TransactionScope?
он сделан как раз для того, что бы вы не думали об этомЯ бы предпочёл самостоятельно решать, можно начинать распределённую транзакцию или нет. Если нет и она должна начаться - выдавать ошибку.
вы не понимаете о чём говорите, не хотите делать распределённую транзакцию размещайте ваши команды в отдельном скопе
...
Рейтинг: 0 / 0
Транзакция по умолчанию
    #37988487
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SolYUtorpationтранзакция становится распределённой , действительно автоматически, но причём здесь TransactionScope?
он сделан как раз для того, что бы вы не думали об этом
Это фантастика. Думать об этом надо всегда, потому что открыться может в любом неподходящем случае.
Скажем, если у нас два соединения к одной базе - то получи распределённую транзакцию.

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

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



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

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

пока граблей не увидел
...
Рейтинг: 0 / 0
Транзакция по умолчанию
    #37988509
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pationвы не понимаете о чём говорите, не хотите делать распределённую транзакцию размещайте ваши команды в отдельном скопе
Ой ли? Есть код с использованием сторонней библиотеки, которая лезет в базу и что-то туда пишет/читает. И ваш тоже код тоже пишет в базу, может быть даже в другую. И всё это под TransactionScope. Вуаля, распределённая транзакция!
...
Рейтинг: 0 / 0
Транзакция по умолчанию
    #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
Транзакция по умолчанию
    #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
Транзакция по умолчанию
    #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
Транзакция по умолчанию
    #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
Транзакция по умолчанию
    #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
25 сообщений из 25, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Транзакция по умолчанию
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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