Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787

Непонятное поведение Entity Framework

20.06.2019, 22:58. Показов 2924. Ответов 37
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер!
Возникли несколько вопросов по EF, не могу найти ответ.
Создал две связи между таблицами
C#
1
2
3
4
5
6
7
8
public class PreOrder
    {
        public int PreOrderId { get; set; }
        public string Number { get; set; }        
        public virtual Customer Customer { get; set; }
        public virtual ModelDoor ModelDoor { get; set; }
 
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Customer
    {
        public int CustomerId { get; set; }
        public string Code { get; set; }
        public string Name { get; set; }
        public string Adress { get; set; }
        public string Email { get; set; }
        public string Mobil { get; set; }
        public virtual ICollection<PreOrder> PreOrders { get; set; }
        public Customer()
        {
            PreOrders = new List<PreOrder>();
        }
        public override string ToString()
        {
            return Code;            
        }
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class ModelDoor
    {
        public int ModelDoorId { get; set; }
        public string Code { get; set; }
        public string Name { get; set; }
        public bool Circuit1 { get; set; }
        public bool Circuit2 { get; set; }
        public bool Circuit3 { get; set; }
        public bool Thickness60 { get; set; }
        public bool Thickness70 { get; set; }
        public bool Thickness80 { get; set; }
        public bool Thickness90 { get; set; }
        public bool Thickness100 { get; set; }
        public virtual ICollection<PreOrder> PreOrders { get; set; }
        public ModelDoor()
        {
            PreOrders = new List<PreOrder>();
        }
        public override string ToString()
        {
            return Code;
        }
    }
Все работает но у меня появляется в DGV пустой столбец



1. Это так и должно быть и его просто скрыть?
2. Первый запрос к БД происходит долго (имеется ввиду что база создана+таблицы) секунд 2-4 и это тоже нормально?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.06.2019, 22:58
Ответы с готовыми решениями:

Странное поведение Entity Framework. Перезапись базы данных, которая не соответствует схеме модели
Подскажите пожалуйста. Я использую в своем приложения Entity Framework, дизайн Code First. Я применяю стратегию инициализации...

В чем разница между Entity Framework и Entity Framework Core?
В чем разница (если она есть) между entity framework и entity framework core?

Entity Framework. Удаление entity без удаления связей
Вечер добрый. Есть модель Coder First. Каскадное удаление запрещено. Удаление произвожу так: try { ...

37
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787
21.06.2019, 12:11  [ТС]
Студворк — интернет-сервис помощи студентам
Usaga, кароче одной строчкой это не делается походу, просто Entity не предполагает, что в связи мне нужно будет больше одного свойства для отображения
0
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787
21.06.2019, 12:16  [ТС]
Еще и при добавлении Id все id Будут дублироваться.
0
Эксперт .NET
 Аватар для Usaga
14790 / 9563 / 1367
Регистрация: 21.01.2016
Сообщений: 36,059
21.06.2019, 12:17
MaksimkaI, всё EF предполагает и всё делается если не одной строчкой, то несколькими. И вообще, EF тут ни при чём. Какая разница откуда взялся класс PreOrder, так ведь? Вы же его могли построить и на основании какого-то файла, а не базы данных. Что бы изменилось?

Добавлено через 37 секунд
Цитата Сообщение от MaksimkaI Посмотреть сообщение
Еще и при добавлении Id все id Будут дублироваться.
Да никто дублироваться не будет. И вообще, ID в UI показывать не принято. Это - техническая информация для пользователя смысла не несущая.
0
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787
21.06.2019, 12:21  [ТС]
Usaga,
Ну уже 2 лишних действия будет мне нужно скрывать id, а этих связей у меня будет около 50 наверное.Еще и из таблиц второго набора везде столбец PreOrders надо будет тоже скрывать.
у меня в DGV загружаются данные вот так
C#
1
dgvPreOrders.DataSource = Context.PreOrders.Local.ToBindingList();
Получается, если мне нужно будет переопределять отображение PreOrders, я уже таким способом DataSource не загружу,
придется делать какую то коллекцию из PreOrdersVM. Я верно думаю?
0
Эксперт .NET
 Аватар для Usaga
14790 / 9563 / 1367
Регистрация: 21.01.2016
Сообщений: 36,059
21.06.2019, 12:22
MaksimkaI, да. И это не сложно.
0
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787
21.06.2019, 12:27  [ТС]
Usaga, Ладно обдумаю еще, башка нагружена уже этой фигней, либо отказать от отображения двух свойств и везде по 1 свойству делать. Но блин по сути мне бы хватило кода заказчика, но менджеры начнут потом путаться
0
Эксперт .NET
 Аватар для Usaga
14790 / 9563 / 1367
Регистрация: 21.01.2016
Сообщений: 36,059
21.06.2019, 12:37
Я так и не понял, что вам мешает нормально отображать данные.
0
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787
21.06.2019, 12:40  [ТС]
Usaga, Вот по сути реализовал, то что вы предлагали
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public PreOrdersForm()
        {
            InitializeComponent();
            Context = new MyContext();
            Context.PreOrders.Load();
            var phones = Context.PreOrders.Join(Context.Customers, // второй набор
                p => p.CustomerId, // свойство-селектор объекта из первого набора
                c => c.CustomerId, // свойство-селектор объекта из второго набора
                (p, c) => new // результат
                {
                    PreOrderId = p.PreOrderId,
                    Number = p.Number,
                    CodeCustomer = c.Code,
                    NameCustomer = c.Name,
                    NodelDoorId=p.ModelDoorId
                });
            //dgvPreOrders.DataSource = Context.PreOrders.Local.ToBindingList();
            dgvPreOrders.DataSource = phones.ToList();
        }
Добавлено через 1 минуту
Только вот сбивается уже связь между PreOrder и ModelDoor. А если для каждой таблицы вот так все пропишу, как выше в коде?
0
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787
21.06.2019, 12:42  [ТС]
Usaga,
0
Эксперт .NET
 Аватар для Usaga
14790 / 9563 / 1367
Регистрация: 21.01.2016
Сообщений: 36,059
21.06.2019, 12:44
MaksimkaI, о обже мой.

Может лучше так?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
using(Context = new MyContext())
{
    var phones = Context.PreOrders
                       .Select(x => new Phone
                        {
                             PreOrderId = x.PreOrderId,
                             Number = x.Number,
                             CodeCustomer = x.Customer.Code,
                             NameCustomer = x.Customer.Name,
                             NodelDoorId = x.ModelDoorId
                        });
                        .ToList();
}
Добавлено через 1 минуту
Не обижайтесь, но код ужасный. Просто ужас. Начиная с архитектуры (кто в базу из консткрутктора формы лезет? Кто из UI вообще в базу ходит? Где using?), заканчивая слабыми познаниями EF'а.
0
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787
21.06.2019, 12:44  [ТС]
Usaga, Понимаю весь мозг ваш съел, спасибо за терпение) В общем с вашей помощью я понял как делать, спасибо огромнейшее!!!!!
0
Эксперт .NET
 Аватар для Usaga
14790 / 9563 / 1367
Регистрация: 21.01.2016
Сообщений: 36,059
21.06.2019, 12:46
Лучший ответ Сообщение было отмечено MaksimkaI как решение

Решение

MaksimkaI, изучите руководство по EF6. Оно вам очень сильно нужно и очень сильно поможет в работе. Текущие ваши познания никуда не годятся. Потратьте время на изучение (много времени не займёт), потом сильно больше сэкономите.
1
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787
21.06.2019, 12:49  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Не обижайтесь, но код ужасный. Просто ужас. Начиная с архитектуры (кто в базу из конструтктора формы лезет? Кто из UI вообще в базу ходит? Где using?), заканчивая слабыми познаниями EF'а.
Я согласен, для вас он ужасен, лезут новички, как я, потому что на данный момент не понимаю смысл разделения UI все дела, да и это для меня сложно. Проект для себя разрабатываю, так что он в производство вряд ли уйдет.
0
Эксперт .NET
 Аватар для Usaga
14790 / 9563 / 1367
Регистрация: 21.01.2016
Сообщений: 36,059
21.06.2019, 12:50
MaksimkaI, начните с малого - с руководства по EF. К архитектуре потом перейдёте.
0
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787
21.06.2019, 12:52  [ТС]
Usaga, Возможно я прикрепляюсь к UI, потому что работаю еще в Excel с Vba. Производство щас привязано к excel.
0
Эксперт .NET
 Аватар для Usaga
14790 / 9563 / 1367
Регистрация: 21.01.2016
Сообщений: 36,059
21.06.2019, 13:36
MaksimkaI, есть некоторые архитекрутные решения призванные открепиться от UI: MVC, MVP, PresentationModel, Document-Object, MVVM, ещё какая наркомания. Погуглите описания этих вещей и примеры. Примерно хотя бы ознакомитесь с основной идеей.

Уточню, что исторически (и по иным причинами) сложилось так: MVP в WinForms и MVVM в WPF.
0
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787
21.06.2019, 13:49  [ТС]
Usaga, Так мне это все наркоманией и кажется, которые очень усложняют код. А так в форме прописал, нажатие кнопки, аха сразу понятно, что происходит. Инициализация формы-аха вот что тут происходит.Нажал это, посмотрел что здесь делается. Лично мне так очень нравиться работать. Ну это сугубо мое мнение, возможно я просто еще не сталкивался с проблемами, которые возникакают в работе с UI напрямую.

Добавлено через 3 минуты
Даже при изучении смотришь материалы, все ведь напрямую с UI работают, мало где шаблон MVC например используют.
0
Эксперт .NET
 Аватар для Usaga
14790 / 9563 / 1367
Регистрация: 21.01.2016
Сообщений: 36,059
21.06.2019, 13:54
MaksimkaI, в таких материалах примеры пытаются сделать как можно проще, чтобы у новичка голову не разорвало. Это осознаный шаг. В школе счёт тоже начинают с палочек, а не линейных уравнений.

Цитата Сообщение от MaksimkaI Посмотреть сообщение
Так мне это все наркоманией и кажется, которые очень усложняют код.
Усложняют только на очень простых проектах. Дальше сложность наоборот начнёт падать с ростом кодовой базы, причём значительно. Так же, такие вещи существенно улучшают поддерживаемость и общее качество кода. Но к понимаю этого надо прийти.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.06.2019, 13:54

Непонятное поведение в цикле
int b = 0; for (int i = 1; i &lt;= 5; i++) { if (_sql._dt1.Rows.ToString() !=...

Entity Framework

Entity framework One vs Zero-or-One
При настройке ассоциаций между двумя сущностями можно выбрать чтобы на конце связь была &quot;один&quot; и &quot;ноль или один&quot;-не...

Entity Framework 6
Нарисовалась неожиданная проблемка. Штудирую Троелсена, там описание Framework 4, у меня 6-я версия. Один из примеров пришлось...

Поиск Entity Framework
Простой и короткий вопрос, как организовать в Entity поиск по частям слов или содержащихся в них букв? Как в SQL команда &quot;Like&quot; В...


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

Или воспользуйтесь поиском по форуму:
38
Ответ Создать тему
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru