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

Проецирование данных из других таблиц (база данных)

07.01.2022, 13:51. Показов 945. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет! Есть моделька описывающая таблицу в базе данных.
Первая:
C#
1
2
3
4
5
6
7
8
public class Case
    {
        public int Id { get; set; }
        public string caseName { get; set; }
        public int caseNumber { get; set; }
        public string caseShortName { get; set; }
        public Price Price { get; set; }
    }
Вторая:
C#
1
2
3
4
5
6
7
public class Price
    {
        public int Id { get; set; }
        public double casePrice { get; set; }
        public int CaseId { get; set; }
        public Case Case { get; set; }
    }
И третья, в которую я хочу спроецировать данные
C#
1
2
3
4
5
6
public class PriceName
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public double TotalPrice { get; set; }
    }

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class ApplicationContext : DbContext
    {
        public DbSet<Case> Cases { get; set; } = null!;
        public DbSet<Price> Prices { get; set; } = null!;
        public DbSet<PriceName> PriceNames { get; set; } = null!;
        public ApplicationContext()
        {
        }
 
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseNpgsql("Server = localhost; Port = 5433; Database = test; Username = postgres; Password = root");
        }
 
    }

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
static void Main(string[] args)
        {
            using(ApplicationContext db = new ApplicationContext())
            {
                db.Database.EnsureDeleted();
                db.Database.EnsureCreated();
                Case riptide = new Case { caseName = "Operation Riptide Case",  caseNumber = 176264317, caseShortName = "riptide"};
                Case glove = new Case { caseName = "Gloves Case", caseNumber = 175854202, caseShortName = "gloves" };
                Case spectrum = new Case { caseName = "Spectrum Case", caseNumber = 175880240, caseShortName = "spectrum" };
                Case prisma = new Case { caseName = "Prisma Case", caseNumber = 176042493, caseShortName = "prisma" };
                Case fracture = new Case { caseName = "Fracture Case", caseNumber = 176185874, caseShortName = "fracture" };
                Case gamma = new Case { caseName = "Gamma Case", caseNumber = 156110183, caseShortName = "gamma" };
                Case bloodhound = new Case { caseName = "BloodHound Case", caseNumber = 49359031, caseShortName = "bloodhound" };
                Case revolver = new Case { caseName = "Revolver Case", caseNumber = 84444464, caseShortName = "revolver" };
 
 
                db.Cases.AddRange(riptide, glove, spectrum, prisma, fracture, gamma, bloodhound, revolver);
                db.SaveChanges();
 
                Price riptidePrice = new Price { casePrice = 0.58, Case = riptide };
                Price glovePrice = new Price { casePrice = 1.84, Case = glove };
                Price spectrumPrice = new Price { casePrice = 0.61, Case = spectrum };
                Price prismaPrice = new Price { casePrice = 0.07, Case = prisma };
                Price fracturePrice = new Price { casePrice = 0.07, Case = fracture };
                Price gammaPrice = new Price { casePrice = 0.35, Case = gamma };
                Price bloodhoundPrice = new Price { casePrice = 0.50, Case = bloodhound };
                Price revolverPrice = new Price { casePrice = 0.12, Case = revolver };
 
                db.Prices.AddRange(riptidePrice, glovePrice, spectrumPrice, prismaPrice, fracturePrice, gammaPrice, bloodhoundPrice, revolverPrice);
                db.SaveChanges();
            }
 
        }

И во втором applicationcontext якобы пользователь хочет увидеть цену riptide кейса

C#
1
2
3
4
5
6
7
8
using(ApplicationContext db = new ApplicationContext())
            {
                var report = db.Cases.Where(x => x.caseShortName == "riptide").Select(s => new PriceName
                {
                    Name = s.caseName,
                    TotalPrice = s.Price.casePrice
                });
            }
делаю вот так данные не появляются в базе pricename и выходит ошибка connection is busy.

Как сделать так, чтобы выбранные данные появились в таблице PriceName??
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.01.2022, 13:51
Ответы с готовыми решениями:

Подстановка данных из других таблиц
Как организовать вывод данных в таблице Заявки, если введён грузоотправитель. Надо выбрать в следующем поле Сотрудника этого...

Подстановка данных из других таблиц
Новичку нужна помощь. Как реализовать подстановку, если есть... Устроился на новую работу, а там всё на бумажках, хотя есть что-то и в...

Сводная таблица (объединение данных других таблиц)
Здравствуйте. Столкнулся с проблемой - задание было сделать сводную таблицу, с тем условием, чтобы при создании нового файла в графу...

1
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
07.01.2022, 15:37
Цитата Сообщение от robben_55 Посмотреть сообщение
Есть моделька описывающая таблицу в базе данных.
У Вас три таблицы, однако.
Какие данные Вы хотите "проецировать" неясно. Если нужно получить некоторый набор данных из двух основных таблиц, например, для отображения, то третья таблица не нужна априори. Для EF достаточно написать UDF или View, вбирающие из основных таблиц нужные поля (столбцы) и эту UDF/View спроецировать (отмапировать) в модель или, если CodeFirst, в базу данных.
Результат: получите новую модель из UDF/View, а также соответствующие методы в контексте.
Для правки данных в основных таблицах пишутся SP, которые опять-таки "проецируется", или пишется код, который будет лазить в две основные таблицы посредством DbSet` EF.
А всю эту солянку, что Вы понаворотили в основном коде, - в печку.

Добавлено через 2 минуты
Ну и главный вопрос: зачем Вам третья таблица, которая не содержит никаких сущностей ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.01.2022, 15:37
Помогаю со студенческими работами здесь

Ввод данных через query из других таблиц
всех приветствую помогите чайнику) есть 2 таблицы в 1й ограниченный заранее введённый список имён, во 2ю вводятся фамилии ...

База данных из таблиц
Условие задачи в файле. Прошу помочь.

База данных из 8 таблиц
Здравствуйте, для последующего построения er-диаграммы и выполнения лаб нужна база данных из 8 таблиц, тематика любая, не слишком большая...

База данных. Заполнение таблиц
Здравствуйте! Нужен совет или подсказка! Есть проект С#. В нем создан dataset и 2 таблицы. На форме при выделении строки в listboxe, должны...

Нужна база данных на 14 таблиц
Может есть у когонибудь любая простенькая база данных минимум на 14 таблиц. Ну или хотябы диаграмма. Ато както с фантазией не очень. Буду...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru