Форум программистов, компьютерный форум, киберфорум
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
 Аватар для Anvean
63 / 55 / 10
Регистрация: 12.02.2019
Сообщений: 303

Работа с контекстом данных

28.02.2020, 13:56. Показов 1632. Ответов 16

Студворк — интернет-сервис помощи студентам
И снова я.. Опять модели.. Дедлайн в апреле на носу.. Лирическое отступление закончено
Теперь ближе к сути. Есть две основных модели и одна связующая(промеж Уточная)
Модель станций
Вопрос номер 1 в чем разница между virtual List<> и Icollection и что предпочтительнее использовать?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 public class Station
    {
        [Key]
        public int Id { get; set; }
        [Required]
        [StringLength(30, MinimumLength = 3)]
        public string Name { get; set; }
        [StringLength(200)]
        public string Slug { get; set; }
        [Required]
        [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:dd'/'MM'/'yyyy}", ApplyFormatInEditMode = true)]
        public DateTime ArrivalDate { get; set; }
        [Required]
        [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:dd'/'MM'/'yyyy}", ApplyFormatInEditMode = true)]
        public DateTime CountyDate { get; set; }
 
        public virtual List<RailrouteStation> RailrouteStations { get; set; } = new List<RailrouteStation>();
 
 
    }
Модель Маршрутов
Вопрос номер 2 Мне допустим надо что-бы в маршрут входило несколько станций, это можно сделать только через дополнительное свойство типо List<Stantion>?
C#
1
2
3
4
5
6
7
8
9
10
public class Railroute
    {
        [Key]
        public int Id { get; set; }
        [Required]
        public string Name { get; set; }
        public virtual List<RailrouteStation> RailrouteStations { get; set; } = new List<RailrouteStation>();
 
 
    }
Промежуточная модель
Вопрос номер 3 Правильно ли сделана связь между моделями ?(См. вопрос 1) И должен ли я работать с этой моделью в контексте данных?
C#
1
2
3
4
5
6
7
8
9
10
   public  class RailrouteStation
    {
        [Key]
        public int Id { get; set; }
        public int Order { get; set; }
        public int IdRailroute { get; set; }
        public virtual Railroute Railroute { get; set; }
        public int IdStation { get; set; }
        public virtual Station Station { get; set; }
    }
Без скринов не выйдет есть некий контекст в котором я хочу присвоить маршруту несколько станций (но не могу, потому что поле Stantion не является списком), далее насколько я не понимаю, надо ли присваивать что либо промежуточной модели, или нет?
Или же мне просто добавить модели маршрута поле списка станций и работать с ним?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.02.2020, 13:56
Ответы с готовыми решениями:

Ошибка с контекстом
Привет. Я уже встречал такую ошибку, но не встречал ответа на нее. При создании AlertDialog'а нужно указывать контекст, если я в активити...

Особенности Работы С Контекстом
Сделал я тут одну штуку. Все в принципе правильно, но не работает. И знаю в общем как поменять, чтобы работало. Принятая схема - не...

Unit-тестыController с контекстом
Здравствуйте! Необходима ваша помощь. Проводя разработку тестов для контроллкра столкнулся с такой проблемой: пользователь обращается к...

16
 Аватар для Anvean
63 / 55 / 10
Регистрация: 12.02.2019
Сообщений: 303
28.02.2020, 20:58  [ТС]
Вопросы актуальны, но вот +1 еще один, с чем мне работать в UnitOfWork`е, с промежуточной моделью?
Вообще не понимаю как это все должно работать :/
0
HF
 Аватар для HF
1303 / 882 / 199
Регистрация: 09.09.2011
Сообщений: 2,590
Записей в блоге: 2
28.02.2020, 21:16
Цитата Сообщение от Anvean Посмотреть сообщение
Вопрос номер 1 в чем разница между virtual List<> и Icollection и что предпочтительнее использовать?
Эту тему можно почитать в интернете и здесь на форуме (если найдёте). Это вопрос собственных предпочтений и тем как вы работаете в своём приложении. Вкратце: ICollection обобщённый тип, совместим с разными реализациями методов. А List конкретика - вы лишаетесь например IEnumerable если это где-то захочется сделать.

Цитата Сообщение от Anvean Посмотреть сообщение
Вопрос номер 2 Мне допустим надо что-бы в маршрут входило несколько станций, это можно сделать только через дополнительное свойство типо List<Stantion>?
То что вы в примере на скриншоте написали - это почти всё плохо. Запомните правило - вы просто заполняете модель, а EF сделает как надо. В 99% случаев это так и работает.
В данном примере - просто заполняете List значениями и сохраняете контекст. EF сам создаст связи и запихает в другую таблицу все эти элементы.
Это значит что после того как вы добавили станции: db.Stations.Add(st1), вы можете уже использовать их в коллекции:
Code
1
RailRoute r11 = new RailRoute() {Name = "aaa1", Stations = new List<Station>(){ st1, st2, st3 }  }
(имена не использовал, писал на память, просто пример привожу)
при SaveChanges
- сначала запишет Station's
- использует объекты для коллекции
- создаст запись RailRoute
- использует объект для записи коллекции станций
- добавит все станции, с Id RailRoute

Добавлено через 23 секунды
Цитата Сообщение от Anvean Посмотреть сообщение
Вопрос номер 3 Правильно ли сделана связь между моделями ?(См. вопрос 1) И должен ли я работать с этой моделью в контексте данных?
Эту модель обсудили в другой теме.
1
 Аватар для Anvean
63 / 55 / 10
Регистрация: 12.02.2019
Сообщений: 303
28.02.2020, 21:45  [ТС]
HF,

Не по теме:

Я вас уже себе в менторы записал, такими темпами скоро будете получать з.п.


Вопрос с моделью RailrouteStantion остается открытым, как я должен с ней работать? Могу ли я через нее допусти вызывать объекты, по идее я должен с помощью нее работать с объектами Railroute и Station, не так ли?
0
HF
 Аватар для HF
1303 / 882 / 199
Регистрация: 09.09.2011
Сообщений: 2,590
Записей в блоге: 2
28.02.2020, 21:58
Цитата Сообщение от Anvean Посмотреть сообщение
Я вас уже себе в менторы записал, такими темпами скоро будете получать з.п.
"И тебя посчитали" (козлик). Не надо меня никуда записывать. Здесь полно людей, кто помогает другим. Сегодня сказал, завтра другой. Я вообще редко пишу. Лучшая награда - знать что совет был правильный и работает.

Цитата Сообщение от Anvean Посмотреть сообщение
Вопрос с моделью RailrouteStantion остается открытым, как я должен с ней работать? Могу ли я через нее допусти вызывать объекты, по идее я должен с помощью нее работать с объектами Railroute и Station, не так ли?
В другой теме я уже высказался как бы я работал с данными.
Что такое "допустим вызывать объекты"? Что нужно - то и ищите. Эта модель поможет искать в разные стороны: станции для маршрута; маршруты для станции.
1
 Аватар для Anvean
63 / 55 / 10
Регистрация: 12.02.2019
Сообщений: 303
28.02.2020, 22:29  [ТС]
HF, Спасибо вам большое, только всеровно не понимаю как работать с этой моделью, Сирко говорил что в репозиториях вообще не нужно работать с этой моделью, вы говорите что с ней можно работать.
Ее ведь надо как-то инициализировать прежде чем работать?
Если так то логично будет передавать ей заполненный станциями маршрут?
Еще вопрос))
C#
1
public virtual Icollection<..> RailrouteStantions {get set} = ?? New list or new Icollection?
Как будет правильно это свойство записать?
0
HF
 Аватар для HF
1303 / 882 / 199
Регистрация: 09.09.2011
Сообщений: 2,590
Записей в блоге: 2
28.02.2020, 23:04
Цитата Сообщение от Anvean Посмотреть сообщение
Как будет правильно это свойство записать?
1) Если не понимаете, просто ничего не трогайте пока не наткнётесь на проблему.
2) Гуглите. Каждый делает как хочет. Нет чётких правил. Можно почитать обсуждения и принять какую-то сторону.
3) нельзя сказать new ICollection можно только new List
Для чего делают инициализацию. Чтобы не мучаться с проверкой на null. То есть мы всегда уверены что у нас есть объект и остаётся проверить только Count.

Цитата Сообщение от Anvean Посмотреть сообщение
всеровно не понимаю как работать с этой моделью, Сирко говорил что в репозиториях вообще не нужно работать с этой моделью, вы говорите что с ней можно работать.
Я не видел что именно он говорил. Но вы столько тем уже создали, что возможно смысл начал "распыляться". Можно использовать, можно не использовать. Зависит от того как вы всё организуете. Вы кстати даже контекст не показали. Возможно его и нет ещё поэтому.
Чтобы не мучаться - используйте эту промежуточную таблицу. Когда поймёте как работает или найдёте другой вариант - можно поменять. У вас дедлайн на носу, а вы закапываетесь глубже и глубже. Всё должно работать легко и не принуждённо.

Цитата Сообщение от Anvean Посмотреть сообщение
Если так то логично будет передавать ей заполненный станциями маршрут?
Я показал пример как создаются маршруты. Это был кусок из вашего Seed() метода. Но аналогично пишется и в обычных условиях.
Вы бы уже создали простейшее приложение и тестировали наполнение. Давно бы поняли что и как работает.
0
 Аватар для Anvean
63 / 55 / 10
Регистрация: 12.02.2019
Сообщений: 303
28.02.2020, 23:14  [ТС]
HF, Дедлайн не волк, в лес не убежит, ST не получится в этот раз - получится в следуйщий goto:ST, отступать не собираюсь))
Закапываюсь или нет, просто не хочу писать говнокод поэтому и пытаюсь разобраться во всем как можно глубже, я понял как работает, уже на стадии вывода всего во вьюху (Но получаю null когда хочу вытянуть данные, классика))).
Я уже сделал простое приложение, и тестировал наполнение, решил делать все заного, и сразу по возможности качественно))
0
HF
 Аватар для HF
1303 / 882 / 199
Регистрация: 09.09.2011
Сообщений: 2,590
Записей в блоге: 2
28.02.2020, 23:31
Цитата Сообщение от Anvean Посмотреть сообщение
Я уже сделал простое приложение, и тестировал наполнение, решил делать все заного, и сразу по возможности качественно))
Тогда оставляйте так как сделали, как работает. Потом, когда покажете готовое решение - если кому-то не понравится - вам скажут и подскажут. А каждый шаг не нужно пытаться переосмыслять, так как возможно там и нет никакого скрытого смысла. Тем более попытка сделать "сразу и качественно" заранее опасна.
0
 Аватар для Anvean
63 / 55 / 10
Регистрация: 12.02.2019
Сообщений: 303
28.02.2020, 23:44  [ТС]
HF, Крайний вопрос на сегодня,ситуация такая что я переписал проект,а бд осталась старая, дропнуть не получается потому что currently use, при миграции выдает "Multiple identity columns specified for table 'Stations'. Only one identity column per table is allowed."
Сама база Название: Screenshot_1.png
Просмотров: 70

Размер: 5.9 Кб, пробовал и удалять подключение, и столбцы, не помогает, прочитал про то что можно посмотреть кто подключен к бд SP_WHO и потом KILL, только не знаю куда это писать, и то ли это))
Как быть?
0
163 / 138 / 35
Регистрация: 25.11.2015
Сообщений: 910
29.02.2020, 08:18
удали базу данных, удали миграции и проведи миграции по новой
0
 Аватар для Anvean
63 / 55 / 10
Регистрация: 12.02.2019
Сообщений: 303
01.03.2020, 21:20  [ТС]
HF, Доброго времени суток, маленький вопросик, вроде-бы всё должно работать но..
Простите за скриншоты но так намного понятнее и быстрее.
Сам контекст данных - Тут всё вроде-бы четко, и должно работать.
Метод репозитория связующей модели - (Я думаю тут возможно нужно добавить Includы, но не знаю как)
Метод контроллера. (Тут всё зависит от метода репозитория, но я добавлю на всякий) -
Представление и сама ошибка -
Пока писал решил пройтись дебагом))
В контексте всё путем, переменная забивается данными -
Но вот в контроллере показывает null в переменной, как исправить?
0
HF
 Аватар для HF
1303 / 882 / 199
Регистрация: 09.09.2011
Сообщений: 2,590
Записей в блоге: 2
02.03.2020, 08:47
Цитата Сообщение от Anvean Посмотреть сообщение
Но вот в контроллере показывает null в переменной, как исправить?
Изучите потом тему про подгрузку данных из связанных таблиц. В гугле это слова: Include, LazyLoading, Ленивая загрузка, EagerLoading, Жадная загрузка.

В контроллере (или там где загружаются данные), допишите
C#
1
2
3
4
5
db.Railroute
// добавить join
.Include("Stations")
// тут как обычно
.GetAll().ToList();
1
163 / 138 / 35
Регистрация: 25.11.2015
Сообщений: 910
02.03.2020, 10:30
C#
1
2
3
4
5
db.Railroute
// добавить join
.Include(i => i.Stations)
// тут как обычно
.GetAll().ToList();
Там тоже будет работать, но так правильнее

Добавлено через 3 минуты
Цитата Сообщение от Anvean Посмотреть сообщение
Простите за скриншоты но так намного понятнее и быстрее.
Не понятее и не быстрее. Используй тэги кода и выкладывай их текстом
0
HF
 Аватар для HF
1303 / 882 / 199
Регистрация: 09.09.2011
Сообщений: 2,590
Записей в блоге: 2
02.03.2020, 12:07
Цитата Сообщение от yurickas Посмотреть сообщение
Там тоже будет работать, но так правильнее
Мне было бы дольше объяснять, почему ошибка компиляции. Этот вызов не всегда сразу доступен. А дописывать что есть альтернативный вариант я уже не стал.
0
 Аватар для Anvean
63 / 55 / 10
Регистрация: 12.02.2019
Сообщений: 303
02.03.2020, 13:08  [ТС]
HF, Такой вопрос, я хочу вытащить через Дроплист/Дропбокс список станций в представление. Я это делал через ViewBag и не работало как нужно, вы вроде-бы говорили что это можно сделать по другому, интересно как?
Пост и Гет методы контроллера, как правильно передать селект лист в представление?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 [HttpGet]
        public ActionResult AddRoute()
        {
            //SelectList stations = new SelectList(eFUnitOfWork.Stations.GetAll(),"Id","Name");
            //ViewBag.Stations = stations;
            return View();
        }
        [HttpPost]
        public ActionResult AddRoute(Railroute railyroute)
        {
            if (!ModelState.IsValid)
            {
                return View(railyroute);
            }
            //SelectList stations = new SelectList(eFUnitOfWork.Stations.GetAll(), "Id", "Name");
            //ViewBag.Stations = stations;
            eFUnitOfWork.Railroutes.Create(railyroute);
            
            eFUnitOfWork.Save();
           
            return RedirectToAction("AllRoutes");
        }
Если раскоментить Viewbag то открывает сайт но при отправке выдает ошибку
Вроде с ней можно что-то сделать, короче даже если ее пофиксить - работать будет не правильно, что с этим можно сделать?
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
07.03.2020, 00:52
Цитата Сообщение от Anvean Посмотреть сообщение
как правильно передать селект лист в представление?
Все зависит от самого представления.
Если оно строго типизировано на модель, то доп.информацию (кроме самого объекта - модели) можно передать несколькими способами. Например, через "рюкзак", но в самом представлении в разборе "рюкзака" нужна явная типизация.
Есть два основных способа передачи в страницу более одной модели (список - тоже модель в общем случае).
1. Использовать мастер-таблицу и прилинкованные. Каждое - строго типизировано на нужную модель (одну)
2. Использовать "надкласс" - контейнер. Создать его ручками и вписать в него все, что требуется для страницы, в т.ч. все модели, которые надо передавать. В методе контроллера (или в репозитории) создавать контейнер, засовывать в него все модели (каждая - НД или единичная модель), потом передавать в единственную страницу, строго типизированную на контейнер. Контейнер удобен также для передачи сопутствующей информации, например данные юзера, № текущей страницы для пагинации, выбранный последний раз юзером элемент списка (<Select>) и т.д. В этом случае в представлении будут доступны все нужные модели.
Ну есть, конечно, способы 3 и даже 4. Например, использование "рюкзака" (есть много недостатков) или хранение актуальной информации о соединении в базе (совсем криво, но работает)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.03.2020, 00:52
Помогаю со студенческими работами здесь

Проблема с контекстом класса ССlientDC
Помогите пожалуйста! Мне нужно создать контекст класса CClientDC. Я обьявляю обьєкт етого класа в заглавочном файле. В конструкторе я так...

Вызов функции с определенным контекстом
Я ищу способ сообщить функции контекст вызова любым возможным способом, используя исключительно ANSI C. Я поясню что имею ввиду: ...

VBulletin Левая колонка с контекстом на форуме
Ребята, подскажите как на форуме булетина сделать на всех страницах левую колонку с контекстом от Гугл. Какие шалоны править? Как это...

PageControl создание меню с контекстом справа
В общем есть PageControl. Мне необходимо чтобы слева были вкладки и в них еще кнопки. Допустим нажимаю на Диаграммы и справа...

Если траф лить с доров на сайты с контекстом
Разрешается ли лить траф с доров (или доров а-ля сайт) на сайты, где размещена контекстная реклама. Как с этим обстоит дело в Adsense,...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru