Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
15 / 13 / 3
Регистрация: 20.02.2018
Сообщений: 446

Возврат результата объединения (join) данных сущностей Entity Framework из метода

26.07.2018, 23:47. Показов 2361. Ответов 5

Студворк — интернет-сервис помощи студентам
Доброго времени суток, ребята!

Есть у меня таблица в БД (Flood) и соответствующая ей сущность EF, которая имеет 2 внешних ключа (на таблицу Post и SolarActivity), которым в соответствие ставятся 2 виртуальных поля в классе сущности EF. Мне нужно чтобы у меня в List были объекты содержащие не ключи, а какое-то поле сущности этих ключей (ну т. е. показывало не "1", а то что соответствует данному ключу в связанной сущности - "Ваня").
Если я просто обращаюсь к этим полям, то мне выдаётся ссылка, а не нужный мне объект, который должен быть по идее по этой ссылки.
В интернете нашёл решение с помощью создание объединения (join) по типу как это делается в SQL.

Прошу помочь в следующем:

1. Есть ли более удобный способ доступа к связанным сущностям?
2. Если 1-ый - нет, то как мне вернуть из метода результат данного объединения, учитывая что он имеет тип Var?

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
public static List<Flood> GetFloodСonnectionEF()
        {
            var context = new ModelDatabaseFastWaterContex();
            var transaction = from flood in context.Floods
                              join posts in context.Posts on flood.Id_Post equals posts.Id_Post into floodPost
                              from postJoined in floodPost.DefaultIfEmpty()
                              join postKoords in context.GeographicalKoordinates on postJoined.Id_GeographicalKoordinates
                              equals postKoords.Id_GeographicalKoordinates into floodPostKoord
                              from postKoordsJoined in floodPostKoord.DefaultIfEmpty()
                              join posts in context.SolarActivities on flood.Id_SolarActivity equals posts.Id_SolarActivity
                              into floodSolar from solarJoined in floodSolar.DefaultIfEmpty()
                              select new
                              {
                                  Id_flood = flood.Id_Flood,
                                  NamePost = postJoined.NamePost,
                                  Koords = postKoordsJoined.KoordinateText,
                                  Date =flood.DateAndTimes,
                                  LongitudeDay=flood.LongitudeDay,
                                  Snow=flood.Snow,
                                  Rain=flood.Rain,
                                  SnowRain=flood.SnowRain,
                                  AirHumidity=flood.AirHumidity,
                                  LevelSnow=flood.LevelSnow,
                                  HardnessSnow=flood.HardnessSnow,
                                  TemperatureDay=flood.TemperatureDay,
                                  TemperatureNight=flood.TemperatureNight,
                                  LevelWater=flood.LevelWater,
                                  Id_SolarActivity=solarJoined.LevelSolar,
                                  TemperatureWater=flood.TemperatureWater,
                                  WarningFlood=flood.WarningFlood,
                                  LevelFreezingGround=flood.LevelFreezingGround,
                               };
            var listFlood = transaction.ToList();
 
            return 
        }
Добавлено через 23 минуты
И ещё один прискорбный момент - не смотря на то что объединение было выстроено вроде верно, но его тест показал, что вместо значения нужного поля он почему-то возвращает какую-то длину Lenght? Почему так?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.07.2018, 23:47
Ответы с готовыми решениями:

Entity Framework. Объединение сущностей
Привет. Начал разбираться с MVC и меня возникла проблема, я создал примитивную базу данных загрузил ее с помощью entity (DataBaseFirst)...

Работа с Entity FrameWork обновление сущностей
Добрый день, у меня есть 2 сущности (работа и люди) со связкой 1 ко многим, есть необходимость менять связь сущности т.е. я хочу изменить у...

Entity Framework: уведомление сущностей об удалении другой сущности, на которую есть ссылка
Доброго времени суток. Кто подскажет, как реализовать на базе Entity Framework такую штуку. Есть сущность клиент и есть сущность заказ....

5
Эксперт .NET
 Аватар для Usaga
14127 / 9347 / 1350
Регистрация: 21.01.2016
Сообщений: 35,125
27.07.2018, 07:11
Лучший ответ Сообщение было отмечено Volodya_ как решение

Решение

Volodya_, вы бы учебничек по EF почитали, что ли...

Цитата Сообщение от Volodya_ Посмотреть сообщение
как мне вернуть из метода результат данного объединения, учитывая что он имеет тип Var?
Очевидно, что завести конкретный класс под проекцию, а не использовать анонимный класс...
0
15 / 13 / 3
Регистрация: 20.02.2018
Сообщений: 446
27.07.2018, 15:34  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
вы бы учебничек по EF почитали, что ли...
У меня сущности имеют навигационные свойства с сигнатурой public virtual, а в учебнике написано, что:
В этом случае нам не потребуется использовать какие-то дополнительные методы, как Include или Load:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
using (SoccerContext db = new SoccerContext())
{
    var players = db.Players.ToList();
    foreach (var p in players)
        Console.WriteLine($"{p.Name} - {p.Team.Name}");
 
    var teams = db.Teams.ToList();
    foreach (var t in teams)
    {
        Console.WriteLine($"{t.Name}");
        foreach (var p in t.Players)
            Console.WriteLine($"{p.Name}");
    }
}
Т.е. мы можем просто обратиться к этому виртуальному полю через "." и нам должен вернуться объект, из которого мы можем взять нужной свойство. Но у меня вместо свойства объекта почему-то возвращает Lenght
0
Эксперт .NET
 Аватар для Usaga
14127 / 9347 / 1350
Регистрация: 21.01.2016
Сообщений: 35,125
27.07.2018, 16:28
Volodya_, свойство Length как правило присутствует в классах имеющих размерность. Т.е. коллекции.

Это во-первых. Во-вторых, я вам не рекомендую использовать Lazy-свойства (виртуальные) до тех пор, пока не разберётесь что к чему, ибо можете нарваться на косяки, когда сущность есть, а контекст уже задиспожен. Уберите ключевое слово virtual, грузите свойства явно, через Include.
0
15 / 13 / 3
Регистрация: 20.02.2018
Сообщений: 446
29.07.2018, 12:16  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
контекст уже задиспожен
Что значит "задиспожен"? Яндекс мне не смог ответить на этот вопрос.
0
Эксперт .NET
 Аватар для Usaga
14127 / 9347 / 1350
Регистрация: 21.01.2016
Сообщений: 35,125
29.07.2018, 12:43
Volodya_, от слова Dispose - распускать, освобождать. Речь о логическом "закрытии" объекта контекста.

Когда вы работаете с "ленивыми" свойствами (Lazy), то EF заменяет эти свойства им же сгенерированными прокси-объектами косящими под объекты ваших классов. Когда вы обращаетесь к свойствам такого ленивого объекта, то он лезет в базу за данными. Если контекст к этому моменту уже был задиспожен (выход за пределы блока using или явно сотворён вызов метода Dispose()), то прокси не сможет сходить в базу за данными.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.07.2018, 12:43
Помогаю со студенческими работами здесь

Есть ли аналог в Entity Framework метода Contain() как Linq to Sql
например, чтобы в Linq отфильтровать в таблице по полю Name все строки, в которых есть наличие слова *xyz*, нам надо при выборке вставить...

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

Автообновление данных с Entity Framework
В составе C# и MSSQL пишу многопользовательскую программу (по сути простой учёт продукции на складах). Использую Entity Framework для...

Обновление данных в Entity Framework
Всем привет, помогите пожалуйста. вот есть такой код testentityEntities creat = new testentityEntities(); user...

Entity Framework и загрузка данных в БД SQL CE
Доброго времени суток! Использую Entity Framework Code First и бд SQL CE 4.0. Пытаюсь прочитать данные в потоке и записать их в бд. Делаю...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK сделайте это, JDK, то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Перейдите по ссылке:. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru