powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Entity Framework. Апдейт в нескольких транзакциях. Почему ?
25 сообщений из 34, страница 1 из 2
Entity Framework. Апдейт в нескольких транзакциях. Почему ?
    #38821812
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делаю простой апдейт элементов в таблице:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
                 using (var db = this.CreateContext())
                 {
                   db.Configuration.ProxyCreationEnabled = false; // PS. Так и не понял, что делает эта строка :)
                  
                   var elements = db.Elements.Where(el=> usersArray.Contains(el.userId)).ToList();
                   
                   foreach (var item in elements)
                   {
                     // апдейт записей.
                   }               
                   db.SaveChanges();
                 }




Профайлер SQL показывает, что после вызова метода SaveChanges - EF кидает кучу отдельных запросов в БД.

Код: xml
1.
2.
3.
                 RPC:Completed	exec sp_executesql N'UPDATE [MySchema].[Element] SET [Field1] = @0 WHERE ([Id] = @1)',N'@0 bit,@1 int',@0=1,@1=1301	.Net SqlClient Data Provider
                 RPC:Completed	...
                 RPC:Completed	...



Почему в разных транзациях то ?

Мне это не нравится... По моему так не должно быть. Если я апдейчу 10 000 записей, то EF делает 10 тысяч запросов в БД ??
База упадет уже после 10 параллельных юзеров (ну хорошо, не с 10) с такими нагрузками.

Объясните пожалуйста, что я делаю не так. Может я чего то не понимаю.
...
Рейтинг: 0 / 0
Entity Framework. Апдейт в нескольких транзакциях. Почему ?
    #38821848
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так работает EF, увы... Как вариант стоит обратить внимание на использование stored procedure и использование imported functions, либо на что-то вроде 3их разработок: тут
...
Рейтинг: 0 / 0
Entity Framework. Апдейт в нескольких транзакциях. Почему ?
    #38821851
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще как вариант сократить время исполнения подобных команд использовать это:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
using (var db = this.CreateContext())
{
    db.Configuration.ValidateOnSaveEnabled = false;
    db.Configuration.AutoDetectChangesEnabled = false;
                  
    var elements = db.Elements.Where(el=> usersArray.Contains(el.userId)).ToList();
                   
    foreach (var item in elements)
    {
        // апдейт записей.
    }               
    db.SaveChanges();
}
...
Рейтинг: 0 / 0
Entity Framework. Апдейт в нескольких транзакциях. Почему ?
    #38821904
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronТак работает EF, увы... Как вариант стоит обратить внимание на использование stored procedure и использование imported functions, либо на что-то вроде 3их разработок: тут

Спасибо.
А что порекомендуете ? Наверное сообщество уже как-то решило этот вопрос - ибо EF существует уже несколько лет. Это я только только начал ковырять :) Не хочется изобретать велосипед то.

Как лучше всего улучшить производительность EF ?
...
Рейтинг: 0 / 0
Entity Framework. Апдейт в нескольких транзакциях. Почему ?
    #38821928
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronТак работает EF, увы... Как вариант стоит обратить внимание на использование stored procedure и использование imported functions, либо на что-то вроде 3их разработок: тут

Что за imported functions ?
...
Рейтинг: 0 / 0
Entity Framework. Апдейт в нескольких транзакциях. Почему ?
    #38822214
Ilya81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я обычно пользуюсь хранимыми процедурами, благо EF умеет их map'ить. SaveChanges, кстати, пользуюсь гораздо реже.
...
Рейтинг: 0 / 0
Entity Framework. Апдейт в нескольких транзакциях. Почему ?
    #38822250
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Entity Framework. Апдейт в нескольких транзакциях. Почему ?
    #38822273
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotekAxeleronТак работает EF, увы... Как вариант стоит обратить внимание на использование stored procedure и использование imported functions, либо на что-то вроде 3их разработок: тут

Спасибо.
А что порекомендуете ? Наверное сообщество уже как-то решило этот вопрос - ибо EF существует уже несколько лет. Это я только только начал ковырять :) Не хочется изобретать велосипед то.

Как лучше всего улучшить производительность EF ?

1. не использовать EF
2. процедуры
...
Рейтинг: 0 / 0
Entity Framework. Апдейт в нескольких транзакциях. Почему ?
    #38822371
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Winnipuh1. не использовать EF
2. процедуры

То все носятся с этим EF, превозносят как нечтно крайне полезное. А как решишь приобщится, оказывается нет даже базовых вещей... :)
...
Рейтинг: 0 / 0
Entity Framework. Апдейт в нескольких транзакциях. Почему ?
    #38822379
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ilya81Я обычно пользуюсь хранимыми процедурами, благо EF умеет их map'ить. SaveChanges, кстати, пользуюсь гораздо реже.

А можно ли, используя EF передавать в процедуру строго-типизированный список объектов, чтобы уже в SQL по нему пройтись и записать/обновить элементы в таблице ?
...
Рейтинг: 0 / 0
Entity Framework. Апдейт в нескольких транзакциях. Почему ?
    #38822398
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotekIlya81Я обычно пользуюсь хранимыми процедурами, благо EF умеет их map'ить. SaveChanges, кстати, пользуюсь гораздо реже.

А можно ли, используя EF передавать в процедуру строго-типизированный список объектов, чтобы уже в SQL по нему пройтись и записать/обновить элементы в таблице ?
http://www.c-sharpcorner.com/UploadFile/78607b/using-table-valued-parameters-in-entity-framework/
...
Рейтинг: 0 / 0
Entity Framework. Апдейт в нескольких транзакциях. Почему ?
    #38822403
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79 http://msdn.microsoft.com/en-us/data/dn456843.aspx

Эта статья о множестве операций в одной транзакции, а не о том как оптимизировать множество однотипных операций в одну. Это не решение вопроса, заданного TC
...
Рейтинг: 0 / 0
Entity Framework. Апдейт в нескольких транзакциях. Почему ?
    #38822408
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotekAxeleronТак работает EF, увы... Как вариант стоит обратить внимание на использование stored procedure и использование imported functions, либо на что-то вроде 3их разработок: тут

Что за imported functions ?

Это объекты в EF, которые создаются для отмапленных ХП, так как напрямую они не вызываются в коде, каждую ХП надо отмапить в импортированную функцию.
...
Рейтинг: 0 / 0
Entity Framework. Апдейт в нескольких транзакциях. Почему ?
    #38822434
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Axeleron,

ProBiotekПочему в разных транзациях то ?
Я привел ссылку на исполнение множества запросов в одной транзакции, как и спрашивалось. Массовые апдейты - это не стезя ORM. Хотя никаких запретов на исполнение пользовательского SQL нет, и ручками можно прописать все, что угодно.
...
Рейтинг: 0 / 0
Entity Framework. Апдейт в нескольких транзакциях. Почему ?
    #38822486
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronТак работает EF, увы... Как вариант стоит обратить внимание на использование stored procedure и использование imported functions, либо на что-то вроде 3их разработок: тут
пипец полный
...
Рейтинг: 0 / 0
Entity Framework. Апдейт в нескольких транзакциях. Почему ?
    #38822535
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,

Почему пипец. EF в принципе не для решения таких задач и оптимизаций разрабатывался. Если хочется быстро и оптимально, то вызов ХП. Ну или глянуть на NHibernate - слышал, он bulk апдейты поддерживает.
...
Рейтинг: 0 / 0
Entity Framework. Апдейт в нескольких транзакциях. Почему ?
    #38822598
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to all
Наброс ;)

Azure кажется ограничивает количество транзакций в еденицу времени.
По странному стечению обстоятельств - EF разрабатывала та же компания, и она же позиционирует EF как передовое средство, которое рекомендуется использовать.

Сложив дважды два делаем выводы ;)
...
Рейтинг: 0 / 0
Entity Framework. Апдейт в нескольких транзакциях. Почему ?
    #38822683
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotekWinnipuh1. не использовать EF
2. процедуры

То все носятся с этим EF, превозносят как нечтно крайне полезное. А как решишь приобщится, оказывается нет даже базовых вещей... :)

Вот именно, я имхую, что крайне полезное оно только в определенных случаях, когда структура базы проста и утрясена, практически не меняется, когда база небольшая.
А те, кто наивно думает, что оно упростит ему жизнь и позволит не вникать в то, как работать с базой - это блудняк.
...
Рейтинг: 0 / 0
Entity Framework. Апдейт в нескольких транзакциях. Почему ?
    #38822729
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WinnipuhProBiotekпропущено...


То все носятся с этим EF, превозносят как нечтно крайне полезное. А как решишь приобщится, оказывается нет даже базовых вещей... :)

Вот именно, я имхую, что крайне полезное оно только в определенных случаях, когда структура базы проста и утрясена, практически не меняется, когда база небольшая.
А те, кто наивно думает, что оно упростит ему жизнь и позволит не вникать в то, как работать с базой - это блудняк.

Я считаю, что EF и вправду очень полезная технология, которая очень упрощает жизнь, особенно когда надо быстро сделать прототип чего-то, чтобы не возиться с конекциями, командами, параметрами вручную. Пробелма автора элементарно решается с помощью function import динамической ХПы, в которую как один параметр передается строка id, разделенных запятой. Хотя, кажется, даже на это идти не надо, так как всю логику можно написать в самой ХП и все будет выполняться одной командой. Не делаейте из мухи слона, тут нет вообще никакой проблемы.
...
Рейтинг: 0 / 0
Entity Framework. Апдейт в нескольких транзакциях. Почему ?
    #38822832
Ilya81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotekIlya81Я обычно пользуюсь хранимыми процедурами, благо EF умеет их map'ить. SaveChanges, кстати, пользуюсь гораздо реже.

А можно ли, используя EF передавать в процедуру строго-типизированный список объектов, чтобы уже в SQL по нему пройтись и записать/обновить элементы в таблице ?

Без проблем. В т. ч. при необходимости можно для параметров/результатов хранимых процедур использовать те же классы, что и для запросов через IQuerable. Обычно я так и делаю. Уточняю, речь веду про model first, там в редакторе модели можно много что настроить, можно ещё обновления выполнять через хранимые процедуры, это тоже задаётся в mapping'е. А простые типы данных он вообще автоматически map'ит.
...
Рейтинг: 0 / 0
Entity Framework. Апдейт в нескольких транзакциях. Почему ?
    #38822874
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ilya81,

Имею дело с Code First подходом. Тут можно делать так, как вы говорите ?
И я не понял - процедура то на каком языке пишется ? Раз вы говорите, что "использовть классы".

Интересно....
...
Рейтинг: 0 / 0
Entity Framework. Апдейт в нескольких транзакциях. Почему ?
    #38822940
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotekIlya81Я обычно пользуюсь хранимыми процедурами, благо EF умеет их map'ить. SaveChanges, кстати, пользуюсь гораздо реже.

А можно ли, используя EF передавать в процедуру строго-типизированный список объектов, чтобы уже в SQL по нему пройтись и записать/обновить элементы в таблице ?

Так нельзя, да и зачем Вам это? Для этого и есть код на серверной части, чтобы сделать, что Вы хотите.
...
Рейтинг: 0 / 0
Entity Framework. Апдейт в нескольких транзакциях. Почему ?
    #38822945
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Axeleron
Так нельзя, да и зачем Вам это? Для этого и есть код на серверной части, чтобы сделать, что Вы хотите.

Затем, что я хочу в одном вызове процедуры передавать НЕЧТО (в моем случае список объектов) за один раз. Чтобы это нечто обновило 10 тысяч объектов таблицы... Чтобы было не 10 тысяч транзакций (с тем же объемом данных), а одна.

PS. В оракл кажется можно передавать списки объектов. Можно ли такое делать в MS SQL ?
...
Рейтинг: 0 / 0
Entity Framework. Апдейт в нескольких транзакциях. Почему ?
    #38822974
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotek,

Так не выйдет.
...
Рейтинг: 0 / 0
Entity Framework. Апдейт в нескольких транзакциях. Почему ?
    #38823016
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronProBiotek,

Так не выйдет.

Хочется чего-то типа этого
http://msdn.microsoft.com/ru-ru/library/system.data.sqlclient.sqlbulkcopy(v=vs.110).aspx
...
Рейтинг: 0 / 0
25 сообщений из 34, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Entity Framework. Апдейт в нескольких транзакциях. Почему ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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