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

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

20.06.2019, 22:58. Показов 2788. Ответов 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
14368 / 9469 / 1360
Регистрация: 21.01.2016
Сообщений: 35,731
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
14368 / 9469 / 1360
Регистрация: 21.01.2016
Сообщений: 35,731
21.06.2019, 12:22
MaksimkaI, да. И это не сложно.
0
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787
21.06.2019, 12:27  [ТС]
Usaga, Ладно обдумаю еще, башка нагружена уже этой фигней, либо отказать от отображения двух свойств и везде по 1 свойству делать. Но блин по сути мне бы хватило кода заказчика, но менджеры начнут потом путаться
0
Эксперт .NET
 Аватар для Usaga
14368 / 9469 / 1360
Регистрация: 21.01.2016
Сообщений: 35,731
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
14368 / 9469 / 1360
Регистрация: 21.01.2016
Сообщений: 35,731
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
14368 / 9469 / 1360
Регистрация: 21.01.2016
Сообщений: 35,731
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
14368 / 9469 / 1360
Регистрация: 21.01.2016
Сообщений: 35,731
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
14368 / 9469 / 1360
Регистрация: 21.01.2016
Сообщений: 35,731
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
14368 / 9469 / 1360
Регистрация: 21.01.2016
Сообщений: 35,731
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
Ответ Создать тему
Новые блоги и статьи
сукцессия 30. Фосфорный и азотный замки по "честному" закону лимитирования Либиха
anaschu 16.07.2026
Основные достижения за последние дни 1. Механизм отложенного высвобождения фосфора Добавлен специальный пул для медленного разложения меланизированных гиф ЕСМ Реализована разная скорость. . .
Запрет пометки на удаление и отмены проведения
Maks 16.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "ПутевойЛист" разработанного в КА2. Задача: запретить помечать на удаление и отменять проведения путевого листа при условии, если он сдан. . .
Как надо было делать правильно - вообще не слушать ИИ, его дело - текст.
Hrethgir 15.07.2026
А вообще надо было делать не так, чтобы не исправлять ошибку https:/ / www. cyberforum. ru/ blogs/ 223907/ 10996. html , правильно было : удалил кнопку, а потом добавил её. Всё это стресс конечно. Почему?. . .
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru