powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / EF 5 - можно обновить записи в БД не загружая их?
11 сообщений из 36, страница 2 из 2
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
11 сообщений из 36, страница 2 из 2
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / EF 5 - можно обновить записи в БД не загружая их?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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