powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / EF 5 - можно обновить записи в БД не загружая их?
36 сообщений из 36, показаны все 2 страниц
EF 5 - можно обновить записи в БД не загружая их?
    #38421828
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Везде видел примеры, где либо с запросом записи, типа db.MyTable.First(...), либо уже загруженную ранее запись (надо думать, с помощью другого контекста или созданием экземпляра этой записи без контекста вообще) аттачили к контексту. А можно, как с обычным запросом SQL - update в такой-то таблице по такому-то фильтру такие-то столбцы?

Конкретно, проблема такая. Есть таблица, где одно из полей - картинка типа varbinary(max), а остальные - лёгкие поля, типа текста и чисел. Мне надо обновить только текст или числа - для этого обязательно надо грузить всю запись с полем varbinary(max)?
...
Рейтинг: 0 / 0
EF 5 - можно обновить записи в БД не загружая их?
    #38421831
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, да. Желательно, обновления такие, без загрузки, делать через какой-нибудь foreach - вобщем, в цикле.
...
Рейтинг: 0 / 0
EF 5 - можно обновить записи в БД не загружая их?
    #38421877
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320А можно, как с обычным запросом SQL - update в такой-то таблице по такому-то фильтру такие-то столбцы?Через SqlQuery("update ...").

user7320Мне надо обновить только текст или числа - для этого обязательно надо грузить всю записьА как же? Это объектное представление записи, объект с потолка что ли значения возьмет?
user7320с полем varbinary(max)?Разве EF поддерживает тип varbinary?
...
Рейтинг: 0 / 0
EF 5 - можно обновить записи в БД не загружая их?
    #38422017
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariyuser7320А можно, как с обычным запросом SQL - update в такой-то таблице по такому-то фильтру такие-то столбцы?Через SqlQuery("update ...").
Не, мне надо понтово - фреймворково.

Antonariyuser7320с полем varbinary(max)?Разве EF поддерживает тип varbinary?
А нафиг он был бы нужен, если бы не поддерживал? varbinary(max) у меня отображается в byte[] (DB First).

Antonariyuser7320Мне надо обновить только текст или числа - для этого обязательно надо грузить всю записьА как же? Это объектное представление записи, объект с потолка что ли значения возьмет?
Мне всё равно, как он и откуда что возьмёт, но я не хочу грузить изображение с его описанием, чтобы поменять только описание. Это с EF сделать можно?
...
Рейтинг: 0 / 0
EF 5 - можно обновить записи в БД не загружая их?
    #38422019
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНе, мне надо понтово - фреймворково.
Я имею ввиду, зачем использовать EF, если писать запрос руками?

Ну неужели надо сначала в контекст данные ЦЕЛИКОМ загрузить, чтобы просто обновить их в БД? Может, можно какую-нибудь облегченную модель, типа один айдишник, которой поменял описание только, а все остальные поля отсутствуют. Потом эту модель отправил в БД, но при этом все остальные поля в этой записи в БД не похерились.

Или для вот таких случаев - просто обновить записи в БД без запроса - как раз и придуман SqlQuery(...)?
...
Рейтинг: 0 / 0
EF 5 - можно обновить записи в БД не загружая их?
    #38422036
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320, попробуй вот так:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
var updatedUser = new User();
updatedUser.Id = 1;
updatedUser.Email = "newemail@example.com";

db.Users.Attach(updatedUser);
var entry = db.Entry(updatedUser);
entry.Property(e => e.Email).IsModified = true;
// other changed properties
db.SaveChanges();



http://stackoverflow.com/a/15339512
...
Рейтинг: 0 / 0
EF 5 - можно обновить записи в БД не загружая их?
    #38422073
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazileuser7320, попробуй вот так:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
var updatedUser = new User();
updatedUser.Id = 1;
updatedUser.Email = "newemail@example.com";

db.Users.Attach(updatedUser);
var entry = db.Entry(updatedUser);
entry.Property(e => e.Email).IsModified = true;
// other changed properties
db.SaveChanges();



http://stackoverflow.com/a/15339512
Да-да, я такое встречал. Я вот и спрашиваю, а не сотрёт ли это картинку из записи, если обновить ей только поле мыла, причём записью, в которой поле картинки - null? Потестить смогу только завтра.
...
Рейтинг: 0 / 0
EF 5 - можно обновить записи в БД не загружая их?
    #38422075
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Штука в том, что по вашей ссылке везде используется updatedUser, который уже как-то когда-то был достан из БД - т. е. это полноценный юзер, без обрезанных (занулённых) полей.
...
Рейтинг: 0 / 0
EF 5 - можно обновить записи в БД не загружая их?
    #38422084
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320bazileuser7320, попробуй вот так:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
var updatedUser = new User();
updatedUser.Id = 1;
updatedUser.Email = "newemail@example.com";

db.Users.Attach(updatedUser);
var entry = db.Entry(updatedUser);
entry.Property(e => e.Email).IsModified = true;
// other changed properties
db.SaveChanges();



http://stackoverflow.com/a/15339512
Да-да, я такое встречал. Я вот и спрашиваю, а не сотрёт ли это картинку из записи, если обновить ей только поле мыла, причём записью, в которой поле картинки - null? Потестить смогу только завтра.
Мне тут сказали, что не сотрёт. Завтра попробую.
...
Рейтинг: 0 / 0
EF 5 - можно обновить записи в БД не загружая их?
    #38422154
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
EF 5 - можно обновить записи в БД не загружая их?
    #38422160
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Мне всё равно, как он и откуда что возьмёт, но я не хочу грузить изображение с его описанием, чтобы поменять только описание. Это с EF сделать можно?Сделай представление, в котором нет этого поля.
...
Рейтинг: 0 / 0
EF 5 - можно обновить записи в БД не загружая их?
    #38422166
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariyuser7320Сделай представление, в котором нет этого поля.
Выпей яду.
...
Рейтинг: 0 / 0
EF 5 - можно обновить записи в БД не загружая их?
    #38422181
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,
Давай абстрагируемся от автора топика, впрочем ему это и не понять..
Вот у нас таблица member, там мы все спихивали в кучу, и пол и адрес, и сексуальную ориентацию, и описание, и в конце блоб
с его фоткой, можно? - конечно можно, многие денормализованные идиоты так и делают, но ничто те вечно , когда то и заказчик проспится ( дурак никогда) и потребует что бы было фото в фас в профиль или еще как, добавлять поля ((?
как легче? вынести все тяжелые поля в отдельную таблицу и связать их форином через id member... и все..
теперь, если мы будем делать проекцию в орм таблицы member, у на появится в member одно поле Image Foto{get;set;} связанной сущности с ленивой загрузкой - все просто..
...
Рейтинг: 0 / 0
EF 5 - можно обновить записи в БД не загружая их?
    #38422285
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariyuser7320Мне всё равно, как он и откуда что возьмёт, но я не хочу грузить изображение с его описанием, чтобы поменять только описание. Это с EF сделать можно?Сделай представление, в котором нет этого поля.
У меня здесь нет представлений. Я делаю консольную утилитку для обновления БД и всяких тестов.

Где-то в степиAntonariy,
Давай абстрагируемся от автора топика, впрочем ему это и не понять..
Вот у нас таблица member, там мы все спихивали в кучу, и пол и адрес, и сексуальную ориентацию, и описание, и в конце блоб
с его фоткой, можно? - конечно можно, многие денормализованные идиоты так и делают, но ничто те вечно , когда то и заказчик проспится ( дурак никогда) и потребует что бы было фото в фас в профиль или еще как, добавлять поля ((?
как легче? вынести все тяжелые поля в отдельную таблицу и связать их форином через id member... и все..
теперь, если мы будем делать проекцию в орм таблицы member, у на появится в member одно поле Image Foto{get;set;} связанной сущности с ленивой загрузкой - все просто..
Заказчик же может не только это попросить, но ещё и три пола добавить, пять ориентаций, цвет волос и перечислитель всех родственников до 7 колена (но только в засисимости от пола, которых три). Поэтому все, кто делают БД без EAV - ретарды.
...
Рейтинг: 0 / 0
EF 5 - можно обновить записи в БД не загружая их?
    #38422407
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степикак легче? вынести все тяжелые поля в отдельную таблицу и связать их форином через id member... и все..
Вообще не вижу плюсов от подобной декомпозиции. Если бизнес-правилами определено 3 картинки у эмплоя, не вижу проблем добавить 3 поля в ту же таблицу. Единственный плюс в разнесении блобов (в отдельную базу) - оптимизация резервного копирования основной БД и ее восстановления.
...
Рейтинг: 0 / 0
EF 5 - можно обновить записи в БД не загружая их?
    #38422436
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степитеперь, если мы будем делать проекцию в орм таблицы member, у на появится в member одно поле Image Foto{get;set;} связанной сущности с ленивой загрузкой - все просто..Я еще не избавился от стереотипов датасетного программирования и не знаю всех бест-практикс EF :)
Конечно, по сравнению с этим вариант с вьюшкой заслуживает яду.
...
Рейтинг: 0 / 0
EF 5 - можно обновить записи в БД не загружая их?
    #38422700
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

точно так же делается и с датасет, и грузится по требованию. Хотя с датасет еще проще, можно и не разбивать таблицу, но не загрузить большие данные сразу. Все эти ЕФ - фигня для детей.
...
Рейтинг: 0 / 0
EF 5 - можно обновить записи в БД не загружая их?
    #38422720
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я вообще отказался от ссылочных типов данных, и оперирую одними ключами. Плюс каждый объект обвешан свойствами, который достанет нужный объект по ключу.

Ибо ситуация, при которой ты:
1. Достаешь объект из контекста.
2. Выходишь из зоны использования контекста.
3. Пытаешься записать контекст обратно (а для этого надо в новый контекст вытащить все объекты, с которыми записываемый объект связан)

- меня вымораживает.

А так - все ключи "ношу с собой", люди в курсе. Без проблем читаю, достаю, записываю.

А image держал бы в другой таблице и доставал по ключу. И всё.
...
Рейтинг: 0 / 0
EF 5 - можно обновить записи в БД не загружая их?
    #38422825
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosВсе эти ЕФ - фигня для детей.
и что прости по вашему для взрослых?

ТС юзайте на здоровье https://www.nuget.org/packages/EntityFramework.Extended но за целостность сами будете нести ответственность

п.с. если кто то не умеет готовить еф эт его проблемы.
...
Рейтинг: 0 / 0
EF 5 - можно обновить записи в БД не загружая их?
    #38422831
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRu,

готовит готовое как то не звучит, типа микроволновка нужна что ль?
В Випрос поля помечаются, типа загрузить по требованию, показать муляж, сделать невидимым и т.д.
и ниче готовить не надо, проще микроволновки
...
Рейтинг: 0 / 0
EF 5 - можно обновить записи в БД не загружая их?
    #38422835
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos, готовить означает уметь пользоваться, давай ребенку базуку он из не выстрелит ..вопрос куда и в кого попадет. о госпади какой то велик использовать в продакшене ..нет уж спасибо
...
Рейтинг: 0 / 0
EF 5 - можно обновить записи в БД не загружая их?
    #38422845
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosAntonariy, точно так же делается и с датасет, и грузится по требованию. Хотя с датасет еще проще, можно и не разбивать таблицу, но не загрузить большие данные сразу. Все эти ЕФ - фигня для детей.
Сахават, хорош бредятину писать.
...
Рейтинг: 0 / 0
EF 5 - можно обновить записи в БД не загружая их?
    #38422877
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot МСУ]ViPRosAntonariy, точно так же делается и с датасет, и грузится по требованию. Хотя с датасет еще проще, можно и не разбивать таблицу, но не загрузить большие данные сразу. Все эти ЕФ - фигня для детей.
Сахават, хорош бредятину писать.[/quot
да токо и слышу это низзя и это низзя, но велик хорош:)
...
Рейтинг: 0 / 0
EF 5 - можно обновить записи в БД не загружая их?
    #38422882
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRuViPRos, готовить означает уметь пользоваться, давай ребенку базуку он из не выстрелит ..вопрос куда и в кого попадет. о госпади какой то велик использовать в продакшене ..нет уж спасибо
какой еще у тя продакшн? книга телефонная что ли?
...
Рейтинг: 0 / 0
EF 5 - можно обновить записи в БД не загружая их?
    #38422894
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,
а не надо дерзить "вася". свой непонятный велик впаривать супер не профессионально
...
Рейтинг: 0 / 0
EF 5 - можно обновить записи в БД не загружая их?
    #38422895
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRuViPRos,
а не надо дерзить "вася". свой непонятный велик впаривать супер не профессионально
да ниче я не впариваю, а то что непонятно тебе - эт я понимаю. :)
...
Рейтинг: 0 / 0
EF 5 - можно обновить записи в БД не загружая их?
    #38422958
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosда токо и слышу это низзя и это низзя, но велик хорош:)
Можно, но осторожно :) Об датасеты можно споткнуться и лоб расшибить...
...
Рейтинг: 0 / 0
EF 5 - можно обновить записи в БД не загружая их?
    #38423024
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

эт точно, тут надо понимать что делаешь, а там дядя за тебя немного подумал, а остальное забыл додумать
...
Рейтинг: 0 / 0
EF 5 - можно обновить записи в БД не загружая их?
    #38423200
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ http://codearticles.ru/articles/421
автор// Update
var obj = new Article { ArticleId = 1 };
context.Articles.Attach(obj);
obj.Title = "123";
context.SaveChanges();

Причём, как я понимаю, нет разницы, когда делать аттач - до изменения объекта или после? Я вот сделал после и тоже сработало.
...
Рейтинг: 0 / 0
EF 5 - можно обновить записи в БД не загружая их?
    #38423241
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Причём, как я понимаю, нет разницы, когда делать аттач - до изменения объекта или после? Я вот сделал после и тоже сработало.
Подробно про присоединение: Присоединение и отсоединение объектов (платформа Entity Framework)
...
Рейтинг: 0 / 0
EF 5 - можно обновить записи в БД не загружая их?
    #38423299
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь не могли бы вы в свете этого посмотреть мой код под конкретную задачу? У меня всё работает, но уж слишком длинно и многословно по коду получается. Может, можно короче?

Есть две БД (старая и новая), в которых одинаковые по схеме таблицы. Есть два ORM, созданных EF. Надо перенести записи из старой БД в новую. Часть записей уже перенесена, но без поля Description. Мне надо обновить у перенесённых записей в новой БД Description'ы из записей в старой БД (о переносе всех остальных записей из старой БД речи пока не идёт). Как это сделать? Надо учесть, что у ещё у таблиц есть тяжёлое поле с картинкой, которую трогать не надо. И я хочу, как раньше говорил, добавить Description'ы без вытаскивания картинки.

Вот схематично:

таблица в старой БД

idnamedescriptionimage1aaa<binary data>2bbb<binary data>3ccc<binary data>

таблица в новой БД

idnamedescriptionimage1a<binary data>2b<binary data>

Надо добавить description'ы aa и bb в записи в новой БД, считав их из старой. Не недостающую в новой БД запись 3 пока забить.


Вот мой подход.

1. Создаю два контекста (для старой и новой БД) и считываю в облегчённом формате МИНИМАЛЬНЫЕ необходимые данные (айдишники нужны для связи с записями в конкретной БД, а имена - для связи одинаковых записей между разными БД):

(почему-то перестали работать выпадающие списки при редактировании, причём что на Опере, что в ФФ - поэтому делаю просто фиксированной ширины)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
OldDB.OldEntities odb = new OldDB.OldEntities();
NewDB.NewEntities ndb = new NewDB.NewEntities();

var newBiogroups =
    ndb.Biogroups
    .Select(b => new
    {
        Id = b.Id,
        Name = b.Name
    })
    .ToList();

var oldBiogroups =
    odb.Biogroups
    .Select(ob => new
    {
        Id = ob.Id,
        Name = ob.Name,
        Description = ob.Description
    })
    .ToList();


2. В старых биогруппах есть нужный мне Description, которые надо перенести в новые. Поэтому фильтрую старые так, чтобы в них оказались только те биогруппы, которые уже есть в таблице в новой БД. Посколько айдишники в разных БД разные, фильтровать остаётся разве что по именам, благо что имена у меня уникальные (на это есть констрэйнт):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
var oldBiogroupsFiltered = oldBiogroups
    .Where(obf => newBiogroups.Any(nb => nb.Name == obf.Name))
    .Select(obf => new
    {
        Id = newBiogroups.First(nb => nb.Name == obf.Name).Id,
        Name = obf.Name,
        Description = obf.Description
    })
    .ToList();


3. Теперь из облегчённых отфильтрованных объектов создаю облегчённые же (без картинок) объекты для вставки в БД и, собственно, вставляю их:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
foreach (var obs in oldBiogroupsFiltered)
{
    NewDB.Biogroup b = new NewDB.Biogroup()
    {
        Id = obs.Id,
        Name = obs.Name,
        Description = obs.Description
    };

    try
    {
        ndb.Biogroups.Attach(b);
        ndb.Entry(b).Property(bio => bio.Description).IsModified = true;

    }

    catch (Exception Ex)
    {
        // логирование...
    }
}

ndb.SaveChanges();
...
Рейтинг: 0 / 0
EF 5 - можно обновить записи в БД не загружая их?
    #38423306
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С try/catch херня пока - забыл вырезать. Не обращайте внимания. Только на код в try.
...
Рейтинг: 0 / 0
EF 5 - можно обновить записи в БД не загружая их?
    #38423310
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320С try/catch херня пока - забыл вырезать. Не обращайте внимания. Только на код в try.
Надо было сохранение изменений в try запихать, да...
...
Рейтинг: 0 / 0
EF 5 - можно обновить записи в БД не загружая их?
    #38423490
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,
Не убедил авторЕдинственный плюс в разнесении блобов, а снижение трафика, а уменьшение памяти
под кеш, более понятная структура, вообще имхо все тяжелые данные должны лежать в отдельной таблице, на худой конец
о чем ты толкуешь)) - никто не запрещает, но даже в этом случае пользоваться атрибутом LazyLoadAttribute надо обязательно - что бы не возникало вопросов как у ТА
...
Рейтинг: 0 / 0
EF 5 - можно обновить записи в БД не загружая их?
    #38423534
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи, не понял, о каком снижении трафика идет речь? Если мне блобы не нужны, я их не тяну.
...
Рейтинг: 0 / 0
EF 5 - можно обновить записи в БД не загружая их?
    #38424040
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрите мой код, пожалуйста. Это нормально работать с "облегчёнными" данными в памяти, а потом аттачить их к контексту, когда перекидываешь их из одной БД в другую при моих условиях?
...
Рейтинг: 0 / 0
36 сообщений из 36, показаны все 2 страниц
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / EF 5 - можно обновить записи в БД не загружая их?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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