powered by simpleCommunicator - 2.0.33     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Управление транзакциями в EF5 (VC 2012)
8 сообщений из 8, страница 1 из 1
Управление транзакциями в EF5 (VC 2012)
    #39837165
MsGuns
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе время суток !

Необходимо выполнить несколько операций в БД: внести изменения, а затем извлечь результат. В контроллере вызывается последовательно хранимки на изменение и хранимка на извлечение. Все отлично работает, но.. При многопользовательской работе с приложением возникает ситуация с рассинхронизацией данных. Т.е. извлекаются не те данные, которые получаются после изменений, выполненных один-за-другим в контроллере.
Следовательно, необходимо все это "завернуть" в одну транзакцию.

Пытался, погуглив, сделать в контроллере так:

Код: c#
1.
2.
3.
4.
5.
6.
            using (var transaction = DB.Database.BeginTransaction())
            { 
                  transaction.Commit();
               ...
                  transaction.Rollback();
            }



Но получил ошибку, что Database не содержит определения для BeginTransaction. Тут же прочитал, что это появилось в EF6

У меня VS 2012 и EF 5. Как мне быть ?

Спасибо.
...
Рейтинг: 0 / 0
Управление транзакциями в EF5 (VC 2012)
    #39837167
stenford
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В ЕF5 используется TransactionScope
Только если используются хранимки, то и транзакции уж тогда лучше делать там-же, а не в ЕF, что-бы не смешивать в кучу их код.
...
Рейтинг: 0 / 0
Управление транзакциями в EF5 (VC 2012)
    #39837168
MsGuns
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stenford,

С transactionscope та же история, я пробовал.
Завернуть все на SQL-сервере нельзя. Нет прав на метаданные сервера.
...
Рейтинг: 0 / 0
Управление транзакциями в EF5 (VC 2012)
    #39837169
MsGuns
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Scope (using System.transactions) появился в FW 4.8
А у меня 4.5
...
Рейтинг: 0 / 0
Управление транзакциями в EF5 (VC 2012)
    #39837172
MsGuns
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пургу написал, извиняюсь. System.transactions появилась еще в ASP.net 2.0, включил сборку в проект и все откомпиллилось :)
Завтра буду пробовать в работе
...
Рейтинг: 0 / 0
Управление транзакциями в EF5 (VC 2012)
    #39837173
stenford
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MsGunsScope (using System.transactions) появился в FW 4.8
А у меня 4.5
как-же нет, когда есть https://docs.microsoft.com/en-us/dotnet/api/system.transactions.transactionscope?view=netframework-4.5
...
Рейтинг: 0 / 0
Управление транзакциями в EF5 (VC 2012)
    #39837174
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MsGunsУ меня VS 2012 и EF 5. Как мне быть ?

Таки обновиться до EF 6, ибо это единственная реально вменяемая реализация, всё что до (да и после) -- сыро.


MsGunsScope (using System.transactions) появился в FW 4.8
А у меня 4.5

С какого перепугу?
Есть ещё с бородатых времён.
...
Рейтинг: 0 / 0
Управление транзакциями в EF5 (VC 2012)
    #39837263
MsGuns
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Фрагмент контроллера

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
        SQLMVCParEntities DB = new SQLMVCParEntities();

             ...
// Удаление номера из Книги
                using (TransactionScope scope = new TransactionScope())
                {
                    // Определить номер листа и ID записи Книги, которая станет активной после удаления
                    var SearchRes = DB.UsFN_FindNearTelBookID(TID, UserInfo.REG_Name, UserInfo.TO_Name, ColumnName, QRows).FirstOrDefault();
                    if (SearchRes != null)
                    {
//                        UsCont.NList = SearchRes.NLIST != null ? SearchRes.NLIST : 0;
                        UsCont.NList = SearchRes.NLIST;
                        var DelResult = DB.UsSP_DelAbonent(TID).FirstOrDefault();
                        UsCont = UsCont.ContainerFillData(DB, UsCont);
//                        UsCont.SelectedTBID = SearchRes.NEARID != null ? SearchRes.NEARID : 0;
                        UsCont.SelectedTBID = SearchRes.NEARID;
                    }
                    scope.Complete();
                }



На первом же операторе блока using (вызов UDF) вываливает ошибку:

Произошла ошибка базового поставщика в EnlistTransaction.

Убираю код со scope - все весело пляшет.

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


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