Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Dapper - обновление только изменившихся записей / 13 сообщений из 13, страница 1 из 1
09.02.2016, 08:33
    #39166196
Sputnick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dapper - обновление только изменившихся записей
Всем привет!

В EF при обновлении записи, я обновлял только поля, которые изменились:

Код: c#
1.
2.
3.
4.
...
if (recordDB.Title != recordBL.Title) { recordDB.Title = recordBL.Title; };
if (recordDB.is_publish != recordBL.IsPuplish) { recordDB.is_publish = recordBL.IsPuplish; };
...



там сначала получаем объект ЕФ с базы, затем каждое поле сверяем с новым (отредактированным) объектом и если отличаются то это поле обновляем....

а как с даппером? Погуглил не вижу. Обновлять всю запись состоящую из 30 полей если изменения произошли только в одном - как то накладно

спасибо.
...
Рейтинг: 0 / 0
09.02.2016, 08:59
    #39166210
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dapper - обновление только изменившихся записей
SputnickОбновлять всю запись состоящую из 30 полей если изменения произошли только в одном - как то накладноВ курсе, что в MSSQL запись на диск производится страницами размером ~8 КБ, содержащими множество записей, даже если изменено только одно поле одной записи. Запись на диск - это самая медленная часть операции по изменению данных в БД.

Делай выводы о нужности твоей оптимизации.
...
Рейтинг: 0 / 0
09.02.2016, 09:34
    #39166238
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dapper - обновление только изменившихся записей
ТС а ты уверен что Ef обновлял только измененное поле а не целиком сущность? смотрел план запросов?
...
Рейтинг: 0 / 0
09.02.2016, 09:44
    #39166244
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dapper - обновление только изменившихся записей
handmadeFromRuТС а ты уверен что Ef обновлял только измененное поле а не целиком сущность?Да, EF обновляет только изменённые поля, при определённых условиях.

Например:
Код: c#
1.
2.
Db.MyTable.First(v => v.ID == id).Value++;
Db.SaveChanges();
...
Рейтинг: 0 / 0
09.02.2016, 09:50
    #39166247
Sputnick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dapper - обновление только изменившихся записей
handmadeFromRuТС а ты уверен что Ef обновлял только измененное поле а не целиком сущность? смотрел план запросов?

да:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 db.Facilities.Attach( facility );
    DbEntityEntry entry = db.Entry( facility );
    foreach( var propertyName in entry.OriginalValues.PropertyNames )
    {
      var original = entry.GetDatabaseValues().GetValue<object>(propertyName);
      var current = entry.GetCurrentValues.GetValue<object>(propertyName);
      if(!object.Equals(original, current))
      {
        entry.Property( propertyName ).isModified = true;
      }
    }
    db.SaveChanges();
  }
...
Рейтинг: 0 / 0
09.02.2016, 09:53
    #39166248
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dapper - обновление только изменившихся записей
Алексей К,

хм ...про такое не знал, конкретно по полям в еф делалось вроде как так, если память мне не изменяет
Код: c#
1.
entry.Property( propertyName ).isModified = true;
...
Рейтинг: 0 / 0
09.02.2016, 09:54
    #39166249
Sputnick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dapper - обновление только изменившихся записей
Алексей КSputnickОбновлять всю запись состоящую из 30 полей если изменения произошли только в одном - как то накладноВ курсе, что в MSSQL запись на диск производится страницами размером ~8 КБ, содержащими множество записей, даже если изменено только одно поле одной записи. Запись на диск - это самая медленная часть операции по изменению данных в БД.

Делай выводы о нужности твоей оптимизации.

ну а если запись содержит поле текста на пару сотен килобайт, зачем же гонять от клиента (бог знает где он расположен) на сервер?
Если это возможно, а это наверняка возможно, то лучше сделать как положено.
...
Рейтинг: 0 / 0
09.02.2016, 09:56
    #39166250
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dapper - обновление только изменившихся записей
Sputnick,
дапер эт не в полне орм, тут либ свой велик либ к примеру расширение Rainbow
https://liangwu.wordpress.com/2012/08/28/dapper-net-tutorial-iii/
...
Рейтинг: 0 / 0
09.02.2016, 09:56
    #39166251
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dapper - обновление только изменившихся записей
handmadeFromRuАлексей К,

хм ...про такое не знал, конкретно по полям в еф делалось вроде как так, если память мне не изменяет
Код: c#
1.
entry.Property( propertyName ).isModified = true;

EF сам всё сравнит на изменения если сущность прочитана из БД, а не присоединена через Attach.

Entity Framework Automatic Detect Changes
...
Рейтинг: 0 / 0
09.02.2016, 09:59
    #39166253
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dapper - обновление только изменившихся записей
SputnickАлексей Кпропущено...
В курсе, что в MSSQL запись на диск производится страницами размером ~8 КБ, содержащими множество записей, даже если изменено только одно поле одной записи. Запись на диск - это самая медленная часть операции по изменению данных в БД.

Делай выводы о нужности твоей оптимизации.

ну а если запись содержит поле текста на пару сотен килобайт, зачем же гонять от клиента (бог знает где он расположен) на сервер?
Если это возможно, а это наверняка возможно, то лучше сделать как положено.В ситуации с Dapper я бы не стал искать общего решения. Я бы это оптимизировал в конкретных местах, по необходимости.
...
Рейтинг: 0 / 0
09.02.2016, 10:01
    #39166255
Sputnick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dapper - обновление только изменившихся записей
Алексей КhandmadeFromRuАлексей К,

хм ...про такое не знал, конкретно по полям в еф делалось вроде как так, если память мне не изменяет
Код: c#
1.
entry.Property( propertyName ).isModified = true;

EF сам всё сравнит на изменения если сущность прочитана из БД, а не присоединена через Attach.

Entity Framework Automatic Detect Changes

EF сам всё сравнит на изменения
----

но при этом ЕФ производит дополнительную обработку и выделяет дополнительное место для кеша. Потом когда сталкиваешься с медленной работой ЕФ приходиться все это учитывать.
...
Рейтинг: 0 / 0
09.02.2016, 10:02
    #39166256
Sputnick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dapper - обновление только изменившихся записей
Алексей КSputnickпропущено...


ну а если запись содержит поле текста на пару сотен килобайт, зачем же гонять от клиента (бог знает где он расположен) на сервер?
Если это возможно, а это наверняка возможно, то лучше сделать как положено.В ситуации с Dapper я бы не стал искать общего решения. Я бы это оптимизировал в конкретных местах, по необходимости.

понял, нужен велосипед )

спасибо.
...
Рейтинг: 0 / 0
09.02.2016, 10:04
    #39166259
Sputnick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dapper - обновление только изменившихся записей
кажись нашел - https://liangwu.wordpress.com/2012/08/28/dapper-net-tutorial-iii/

смущает только то что пакет довольно старый.
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Dapper - обновление только изменившихся записей / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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