|
Entity Framework: многопоточность и транзакции
|
|||
---|---|---|---|
#18+
Добрый день. Есть таблица Category с полями id и name. name - уникальное поле. Нужна функция поиска категории по имени, если такой категории нет, то нужно добавить новую категорию. Обработка большого количества строк идет в разных потоках, соответственно возникает исключение при вставки неуникальных значений в поле name. Начал копать в сторону транзакций: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
в результате куча ошибок типа: "Транзакция вызвала взаимоблокировку ресурсов и стала жертвой взаимоблокировки. Запустите транзакцию повтороно." Что делаю не так? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 15:44 |
|
Entity Framework: многопоточность и транзакции
|
|||
---|---|---|---|
#18+
noligin, отсоединяй контекст, добавляй что надо, а потом соединяй и обновляй данные ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 17:53 |
|
Entity Framework: многопоточность и транзакции
|
|||
---|---|---|---|
#18+
noligin, Как звучало условие задачи изначально? Что от вас требуют сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 21:13 |
|
Entity Framework: многопоточность и транзакции
|
|||
---|---|---|---|
#18+
Lord British, изначальная задача: есть таблица Client c полями id, client_name, id_category и вышеописанная таблица Category. Также есть текстовые файлы с несколькими тысячами строк формата: имя клиента, название категории. эти данные и нужно загрузить в бд. Клиенты добавляются функцией CreateClient Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Вот и все условие. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 22:50 |
|
Entity Framework: многопоточность и транзакции
|
|||
---|---|---|---|
#18+
noligin, Используйте штатные средства СУБД. Или через Management Studio --> Import Data --> Flat File --->, или пользуйтесь утилитой bcp, как тут ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2013, 00:06 |
|
Entity Framework: многопоточность и транзакции
|
|||
---|---|---|---|
#18+
noligin, или гуглите bulk insert ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2013, 00:08 |
|
Entity Framework: многопоточность и транзакции
|
|||
---|---|---|---|
#18+
Lord British, при чем тут штатные средства и Managment Studio? мне надо чтобы это пользователь делал в программе Proganoligin, отсоединяй контекст, добавляй что надо, а потом соединяй и обновляй данные я не понял, от чего отсоединять контекст? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2013, 04:53 |
|
Entity Framework: многопоточность и транзакции
|
|||
---|---|---|---|
#18+
noliginProganoligin, отсоединяй контекст, добавляй что надо, а потом соединяй и обновляй данные я не понял, от чего отсоединять контекст? я вам крайне рекомендую почитать литературу, статьи по EF, крайне полезное для Вас занятие окажется. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2013, 10:13 |
|
Entity Framework: многопоточность и транзакции
|
|||
---|---|---|---|
#18+
Proganoliginпропущено... я не понял, от чего отсоединять контекст? я вам крайне рекомендую почитать литературу, статьи по EF, крайне полезное для Вас занятие окажется. Большое спасибо за совет. Не думайте что я не читал литературу по EF, но ее не так уж и много на русском языке. Про присоединение и отсоединение сущностей от контекста я тоже читал, и если это вы и имели ввиду в своем первом ответе - то я не совсем понимаю как это мне поможет. ну а все таки, может кто нибудь даст дельный совет, кроме как RTFM ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2013, 10:25 |
|
Entity Framework: многопоточность и транзакции
|
|||
---|---|---|---|
#18+
noligin, Вам не нужен ни EF, ни тем более многопоточность. Тысячи строк - это как пылинка на заднице слона. Вся ваша программа состоит из одной команды Код: sql 1. 2. 3. 4. 5. 6. 7.
Сделайте к ней выбор пути и красивую кнопочку "ПОЕХАЛИ!" добавьте вызов этой команды и программа готова. Для придания солидности проделываемой программой работе, рекомендую перед вызовом команды вызвать Threed.Sleep(). :D ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2013, 10:43 |
|
Entity Framework: многопоточность и транзакции
|
|||
---|---|---|---|
#18+
ps. это тема сферическая тема про EF, многопоточность и уровни изоляции в вакууме. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2013, 10:50 |
|
Entity Framework: многопоточность и транзакции
|
|||
---|---|---|---|
#18+
Lord British, причем тут bulk insert? забудьте что информация берется из файлов. Вызов CreateClient может производиться несколькими пользователями одновременно с одинаковыми значениями categoryName. В случае без транзакций возникает ошибка вставки неуникальных значений в таблицу. Если я использую транзакции как я написал - возникают дедлоки. Вот и вся проблема. Насчет того что мне не нужна EF я может и соглашусь, могу это сделать создавая или находя id категории через хранимую процедуру. Но мне хочется узнать как это сделать через EF. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2013, 12:44 |
|
Entity Framework: многопоточность и транзакции
|
|||
---|---|---|---|
#18+
noligin, научитесь формулировать вопросы, я например в заголовке Вашего треда не видел вот этого noliginВызов CreateClient может производиться несколькими пользователями одновременно с одинаковыми значениями categoryName, а тут оказывается многопользовательская среда. Напишите процедуру и вызывайте её при добавлении данных, в ней можно проверять уникальность и реагировать как Вам захочется. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2013, 12:56 |
|
Entity Framework: многопоточность и транзакции
|
|||
---|---|---|---|
#18+
Proga, согласен, изначально неверно сформулировал, каюсь:) повторюсь, через процедуру я уже сделал, но мне хочется узнать как такое провернуть с помощью EF ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2013, 13:00 |
|
Entity Framework: многопоточность и транзакции
|
|||
---|---|---|---|
#18+
noliginProga, согласен, изначально неверно сформулировал, каюсь:) повторюсь, через процедуру я уже сделал, но мне хочется узнать как такое провернуть с помощью EF транзакция уже содержится в контексте, тебе нужно на каждый поток, создавать новый контекст ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2013, 14:30 |
|
Entity Framework: многопоточность и транзакции
|
|||
---|---|---|---|
#18+
noliginошибка вставки неуникальных значений в таблицу причем тут транзакции вообще, у тебя есть уникальный индекс на поле name. при вставке неуникальных значений тебя оповещают - нельзя вставить, есть уже. уровень изоляции транзакций Serializable для этой задачи - 5 баллов. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2013, 15:23 |
|
Entity Framework: многопоточность и транзакции
|
|||
---|---|---|---|
#18+
pationтранзакция уже содержится в контексте, тебе нужно на каждый поток, создавать новый контекст по умолчанию она начинается и заканчивается в пределах метода SaveChanges. Он ее начинает и коммитит если все хорошо. У автора создается Ambient транзакция ее подхватит контекст, если в строке соединения установлено Enlist=True. ps. уссыся потоки, контексты, сессии. наполеоновские задачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2013, 15:28 |
|
Entity Framework: многопоточность и транзакции
|
|||
---|---|---|---|
#18+
Lord Britishpationтранзакция уже содержится в контексте, тебе нужно на каждый поток, создавать новый контекст по умолчанию она начинается и заканчивается в пределах метода SaveChanges. Он ее начинает и коммитит если все хорошо. У автора создается Ambient транзакция ее подхватит контекст, если в строке соединения установлено Enlist=True. ps. уссыся потоки, контексты, сессии. наполеоновские задачи. проблемма как раз в том и есть, что для одного контекста SaveChanges выполняется в разных потоках, дополнительный скоп тут и не нужен, а вот поставить lock либо, повторюсь использовать разные контексты поможет делу ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2013, 17:07 |
|
|
start [/forum/topic.php?fid=17&fpage=28&tid=1350112]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
others: | 274ms |
total: | 410ms |
0 / 0 |