Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
5 / 5 / 0
Регистрация: 12.08.2015
Сообщений: 340

Частичное обновление записей в БД

18.03.2020, 18:20. Показов 816. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть две связанные таблицы: Sections и Items
SQL
1
2
3
4
CREATE TABLE "Sections" (
    "Id"    INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    "Name"  TEXT NOT NULL
)
SQL
1
2
3
4
5
6
7
CREATE TABLE "Items" (
    "Id"    INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    "Name"  TEXT NOT NULL,
    "Code"  TEXT,
    "SectionId" INTEGER NOT NULL,
    FOREIGN KEY("SectionId") REFERENCES "Sections"("Id") ON DELETE CASCADE ON UPDATE CASCADE
)
В своем приложении на WPF использую Entity Framework:
C#
1
2
3
4
5
6
7
8
9
10
public class Section
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public ICollection<Item> Item { get; set; }
        public Section()
        {
            Item = new List<Item>();
        }
    }
C#
1
2
3
4
5
6
7
public class Item
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int SectionId { get; set; }
        public Section Section { get; set; }
    }
C#
1
2
3
4
5
6
7
8
9
10
11
class dataTCS : DbContext
    {
        public dataTCS() : base("dataTCS")
        {
 
        }
 
        public virtual DbSet<Section> Sections { get; set; }
        public virtual DbSet<Item> Items { get; set; }
 
    }
У меня есть записи в этих таблицах. Приложение извлекает эти данные из таблицы, с ними работает и может их изменить.
Затем я хочу сохранить эти данные. У меня есть метод, параметр которого - обновленная запись для таблицы Section (вместе со связанными данными из таблицы Item):
C#
1
2
3
4
5
6
7
8
9
10
11
public static void WriteSectionWithItems(Section newSection)
        {
            using (Database.dataTCS db = new Database.dataTCS())
            {
                var oldSection = db.Sections.Where(s => s.Id == newSection.Id).Include(i=>i.Item).First();
 
                // ?????????
 
                db.SaveChanges();
            }
        }
К примеру, значения oldSection и newSection могут быть такими:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
                oldSection = new Section()
                {
                    Name = "oldName",
                    Item = new List<Item>()
                    {
                        new Item() { Id = 1, Name = "1" }
                    }
                };
 
                newSection = new Section()
                {
                    Name = "newName",
                    Item = new List<Item>()
                    {
                        new Item() { Id = 1, Name = "11"},
                        new Item() { Id = 0, Name = "22"}
                    }
                };
При этом для новых элементов Item Id ставится 0, тем самым это говорит, что элемент новый. А элемент Item, у которого Id=1, поменялось только имя, т.е. его нужно только изменить в БД.

Как реализовать обновление и в случае необходимости добавление записей в БД в методе WriteSectionWithItems?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.03.2020, 18:20
Ответы с готовыми решениями:

SQL Update с условием, частичное обновление
Всем привет! Вообщем как делать update с условием? Мне нужно сделать так, если переменная пуста то не обновлять конкретный столбец.Делаю...

Частичное обновление модели
Добрый вечер. Есть модель представления: public class AdminProductModel { public Product Product { get; set; } ...

Частичное обновление страницы
Как сделать так, чтобы при переходе на другие страницы, обновлялась лишь часть сайта? Тоесть мне нужно, чтобы шапка сайта и футер не...

1
Эксперт .NET
 Аватар для Usaga
14138 / 9366 / 1350
Регистрация: 21.01.2016
Сообщений: 35,234
19.03.2020, 14:22
Цитата Сообщение от Semyon001 Посмотреть сообщение
"Id"    INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
PRIMARY KEY и есть уже уникальный индекс, ещё один поверх навешивать не надо (UNIQUE).

Цитата Сообщение от Semyon001 Посмотреть сообщение
Как реализовать обновление и в случае необходимости добавление записей в БД в методе WriteSectionWithItems?
Возможно, что проще было бы просто приаттачить Section к контексту со статусом Modified, а так же перебрать все Item и тоже приаттачить, но со статусами определяющимися значением ID.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static void WriteSectionWithItems(Section newSection)
        {
            using (Database.dataTCS db = new Database.dataTCS())
            {
                db.Sections.Entry(newSection).State = EntityState.Modified;
 
                foreach(var item in newSectio.Item)
                {
                      db.Items.Entry(item).State = item.Id != 0 ? EntityState.Modified : EntryState.Added;   
                } 
 
                db.SaveChanges();
            }
        }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.03.2020, 14:22
Помогаю со студенческими работами здесь

частичное обновление страницы
Имеется страница с html содержимым и подключённым в ней CSS файликом. и вот стрвница сформирована и отображена в браузере, и тут...

Частичное Обновление (ajax)
Доброго времени суток! Не сталкивался ли кто с такой ситуацией. Имеется несколько полей для частичного обновления (пусть вычисляемые поля...

Частичное обновление конфигурации
Дано: Asus P7H55-M LE i5-650 AMD Radeon 5700 HD 4Gb RAM Хочу добавить ОЗУ, сменить БП (на данный момент 7 лет БП) и купить...

ADOTable и частичное обновление
Здравствуйте. Подскажите пожалуйста, как сделать обновление ADOTable только для одной записи. Заранее спасибо!

Частичное обновление веб страницы
Работаю с бд в которой несколько тысяч строк данных. Для снижения нагрузки хочу организовать такую схему - запросить необходимые мне данные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 31.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 31.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 30.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru