0 / 0 / 0
Регистрация: 03.04.2020
Сообщений: 5
1

Sql codeFirst Не все свойства из бд возвращаются, некоторые из них равны null!(

03.04.2020, 21:14. Показов 522. Ответов 2

Author24 — интернет-сервис помощи студентам
Народ начал недавно изучать SQL, подход code first в asp.net mvc. Возникла проблема во время обращения к объекту класса в строго типизированном методе контроллера. Дело в том что когда Я пытаюсь вывести в браузер определенные свойства, объекта через Кл слово Model(естественно через цикл foreach) в одном из свойств(тип этого свойства класс, у которого тоже есть свои свойства), значение "null".
Значение объектов сначала записываются в бд через контекст, сохраняются, а при попытке вытащить из бд этот объект, не все свойства возвращаются из бд.
Вот Код:
Вот строго типизированный метод.
C#
1
2
3
4
5
6
7
8
9
 ShopDbContext ShopDbContext = new ShopDbContext();
     
   public ActionResult Index()
        {
 
          WorkSim();
 
            return View(ShopDbContext.Doors);
        }
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
Вот метод инициализации новых элементов в бд.
 private void WorkSim()
        {
            List<CategoryDoors> category = new List<CategoryDoors> {
                new CategoryDoors { Name ="Стандарт"},
                new CategoryDoors {Name ="Жиза"} 
            };
            List<Door> doors = new List<Door>
            {
                new Door
                {
                    categoryDoors = category.Last(),
                    Name = "Берёзка",
                    Color = "Зебра Чёрно-Белый",
                    Made = "Русь",
                    LongDesc = "Это дверь сделана из лучших сортов дуба в двревней руси при Владимире Красно-Сошлнышко.Его княжение процветало долгие годы. Ходят легенды о том, что когда его мучила тоска он наглаживал дверь берёзка, представляя наш великий русский лес.",
                    Price = 10000,
                    ShortDesc ="Спроси у Владимира",
                     Size = "200см 110см 15см"
 
 
                },
                new Door
                {
                    categoryDoors = category.First(),
                    Name = "Рыжик",
                    Color = "Оранжевый",
                    Made = "Румыния",
                    LongDesc = "Это дверь сделана из лучших рыжиков Румынии.Говорить особо нечего, дверь как дверь",
                    Price = 2000,
                    ShortDesc ="Рыжики рулят",
                     Size = "180см 90см 5см"
                },
            };
            foreach (var item in category)
            {
                ShopDbContext.CategoryDoors.Add(item);
            }
 
            foreach (var item in doors)
            {
                ShopDbContext.Doors.Add(item);
            }
 
            ShopDbContext.SaveChanges();
 
        }
Вот представление:
HTML5
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
@model IEnumerable<ShopDoorPavel.Models.Door>
 
@{
    Layout = null;
}
 
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
    </head>
    <body>
 
        <asp:Panel id="BlockDiv" runat="server" Heigth="400px" Width="300px" Border="3px" Border-Color="gray">
           
            @foreach (var item in Model)
            {
            <ul>
                <li>Название:@item.Name</li>
                <li>Категория двери:@item.categoryDoors.Name</li>@*Ошибка обращения к свойству имя категории в нем пусто! Всё!*@
                <li>Цвет:@item.Color</li>
                <li>Краткое описание:@item.ShortDesc</li>
                <li>Размеры:@item.Size</li>
                <li>Цена:@item.Price</li>
                <li><input type="submit" name="ViewMore" value="Подробнее" /></li>
 
            </ul>
            }
 
        </asp:Panel>
 
        </body>
    </html>
Не могу обратиться к свойству item.categoryDoors.Name. В чём дело? Хотя в бд всё на месте, указан индекс этого свойства.
При первой отладки(во время занесения и сохранения данных в бд) всё работает как и задумывалось. Но при следующих компиляциях говорит о том что item.categoryDoors = null.
Вот класс описания двери:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
namespace ShopDoorPavel.Models
{
    public class Door
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string ShortDesc {get;set;}
        public string LongDesc {get;set;}
        public string Color {get;set;}
        public string Size {get;set;}
        public string Made {get;set;}
        public decimal Price {get;set; }
        public CategoryDoors categoryDoors { get; set; }
 
 
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.04.2020, 21:14
Ответы с готовыми решениями:

CodeFirst каскадное удаление или SET NULL
В общем возникла следующая проблема: Есть таблица, являющаяся словарём и есть таблица, которая...

Entity CodeFirst изменить тип свойства
Возникла необходимость изменить тип одного из свойств. Меняю тип с int на decimal (в коде). В...

Webbrowser. Как отследить все события, которые происходят в окне после деятельности полльзователя и некоторые из них записать в файл?
Имеется webbrowser расположенный на форме. Необходимо отслеживать все события, которые происходят...

Ошибка при удалении и добавлении записи из сущности EF CodeFirst в MS SQL
Я только начинаю изучать ASP.NET и связанные с ним технологии, поэтому буду очень признателен за...

2
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,079
06.04.2020, 08:22 2
Не уверен, но думаю нужно переделать модель. У Entity framework есть определенные соглашения по именованию объектов.
tutorial_conventions
Первый раз свойство доступно из-за
C#
1
categoryDoors = category.First(),
Для первичной инициализации лучше использовать наследника от DropCreateDatabaseAlways.
0
0 / 0 / 0
Регистрация: 03.04.2020
Сообщений: 5
06.04.2020, 08:32  [ТС] 3
Спасибо, за ответ. Решил вопрос через метод контекста include с аргументов свойства категории.
C#
1
            return View(ShopDbContext.Doors.include("categoryDoors"));
0
06.04.2020, 08:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.04.2020, 08:32
Помогаю со студенческими работами здесь

Десериализация, значения равны null
Десериализирую json (ответ с сервера) в таком виде {&quot;result&quot;:&quot;\u041a...

Если числа не равны, то заменить меньшее из них большим, а если равны — заменить нулями
Даны целые числа m и n. Если числа не равны, то заменить меньшее из них большим, а если равны -...

Если числа не равны, то заменить меньшее из них большим, а если равны — заменить нулями
Даны целые числа m и n. Если числа не равны, то заменить меньшее из них большим, а если равны -...

Если числа не равны, то заменить каждое из них одним и тем же числом, равным большему из исходных, а если равны, то заменить числа нулями.
РЕШИТЕ пожалуйста 1) Даны целые числа m,n. Если числа не равны, то заменить каждое из них одним...

Если числа не равны, то заменить каждое из них одним и тем же числом, равным большему из исходных, а если равны, то заменить числа нулями
2)Даны целые числа m, n. Если числа не равны, то заменить каждое из них одним и тем же числом,...

Если числа не равны,то заменив каждое из них одним и тем же числом, равным большему из исходных,а если равны то заменив числа нулями.
Даны целые числа ш,и: Если числа не равны,то заменив каждое из них одним и тем же числом, равным...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru