powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / LINQ Не вытягивает ссылочные сущности.
25 сообщений из 61, страница 2 из 3
LINQ Не вытягивает ссылочные сущности.
    #39667968
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123А ты с параметром ошибсяВо-первых, я не утверждал - что это причина, я так и написал "Проверь на всякий случай".

Во-вторых:
Petro123refregдолжна быть true по умолчанию вкл. Но конечно пусть проверит.Что? Значение по-умолчанию изменять нельзя?
Это значение не мог изменить другой разработчик для своих нужд, и забыть вернуть? (если один инстанс)
Это значение нельзя задать в конструкторе?

От тебя одно словоблудие...
...
Рейтинг: 0 / 0
LINQ Не вытягивает ссылочные сущности.
    #39667972
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Ну дак я ставлю на то что чел просто связи не там и не те расставил.Это что спорт?
Учись мыслить логически (а потом писать), явная загрузка работает.

И,Petro123Это факты
...
Рейтинг: 0 / 0
LINQ Не вытягивает ссылочные сущности.
    #39667996
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
блин. Зайдёшь на форум в надежде что тут про IT разговор, а тут опять одно и то же.
refregВо-первых, я не утверждал - что это причина, я так и написал "Проверь на всякий случай".
а потом добавил))
21533017
Выводы делайте сами.
...
Рейтинг: 0 / 0
LINQ Не вытягивает ссылочные сущности.
    #39668012
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123блин. Зайдёшь на форум в надежде что тут про IT разговор, а тут опять одно и то же.Аналогично...
А чё ты так разнервничался? Выпей таблеточку...
...
Рейтинг: 0 / 0
LINQ Не вытягивает ссылочные сущности.
    #39670238
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тыкс, продолжаем изумляться...
Сделал тестовый пример.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
вариант А

var aaa = await db.AssessmentFormDetails.FindAsync(Id);
{StaffCompetecyInventory.Models.AssessmentFormDetail}

вариант Б
var bbb = await db.AssessmentFormDetails.FindAsync(3690);
{System.Data.Entity.DynamicProxies.AssessmentFormDetail_0E353859AB9C37A6938C598B32653FA41CF490D703B2E95A829BBC004DD83605}


В варианте А, как и предполагалось назначился тип StaffCompetecyInventory.Models.AssessmentFormDetail из модели и подчиненные сущности не вытянулись, NullReference. А в варианте Б произошло что-то странное. Переменная bbb привелась к какому-то странному типу System.Data.Entity.DynamicProxies.AssessmentFormDetail_0E353859AB9C37A6938C598B32653FA41CF490D703B2E95A829BBC004DD83605 и все подчиненые сущности были уже проинициализированы. Разница между А и Б, А - передали в метод FindAsync переменную Id, в Б - передали число, равное переменной Id, 3690.

Кното-то сможет ппрояснить, что там происходит???
...
Рейтинг: 0 / 0
LINQ Не вытягивает ссылочные сущности.
    #39670242
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic HunterКното-то сможет ппрояснить, что там происходит???дык уже писали и даже ставки делали)))на неверную Модель и маппинг.
...
Рейтинг: 0 / 0
LINQ Не вытягивает ссылочные сущности.
    #39670247
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему в "А" вытягивается экземпляр модели, а в "Б" dynamic proxy? Лениваая загрузка включена, вся конфигурация по умолчанию.
...
Рейтинг: 0 / 0
LINQ Не вытягивает ссылочные сущности.
    #39670252
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic HunterПочему в "А" вытягивается экземпляр модели, а в "Б" dynamic proxy? Лениваая загрузка включена, вся конфигурация по умолчанию.были 4,5 догадок в топике. Но ты ответы не читаешь.
Ну если забыть всё что выше писали, то тебе тяжело тест из двух классов сделать?
...
Рейтинг: 0 / 0
LINQ Не вытягивает ссылочные сущности.
    #39670256
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Но ты ответы не читаешь.

+1
...
Рейтинг: 0 / 0
LINQ Не вытягивает ссылочные сущности.
    #39670304
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic HunterПочему в "А" вытягивается экземпляр модели, а в "Б" dynamic proxy? Лениваая загрузка включена, вся конфигурация по умолчанию.

Делай тестовый проект, выкладывай.
...
Рейтинг: 0 / 0
LINQ Не вытягивает ссылочные сущности.
    #39670345
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там все связано с обновлением сущности. Перед тем как вызвать Find() происходит обновление

Код: c#
1.
2.
db.Entry(assessmentFormDetail).State = EntityState.Modified;
await db.SaveChangesAsync();



и Find() вытаскивает сущность assessmentFormDetail из кеша без запроса к базе, в таком-же виде, как мы ее туда поместили: AssignedAssessmentForm, AssignedCompetencyCategoryDetail, AssignedRatingScale - не инициализированы. Просто обновили Id вчешних ключей. Ежели не обновлять сущность перед запросом Find(), то к базе пролезет запрос и Find() вернет прокси со всеми инициализироваными сущностями, т.е. ленивая загрузка сработает. Вот чем собака порылась. Так-ли оно должно быть а не знаю.

ЗЫ
Вчера прочитал бэст практис один и чувак там высказал не плохую мысль: не использовать никакие ленивые загрузки, ни changetracking-и и доставать все вручную в LINK запросе, перечислив ссылочные сущности и их поля явно, чтобы не тащить лишнего и не нарываться внезапно на NullReferense. И я больше склонен с ним согласиться, чем нет. А так со схемой модели все в порядке, просто есть нюансы ;)


Код: 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.
    public class AssessmentFormDetail
    {
        public int Id { get; set; }
        [Index("AK_AssessmentFormDetail", 1, IsUnique = true)]
        [ForeignKey("AssignedAssessmentFormId")]
        public virtual AssessmentForm AssignedAssessmentForm { get; set; }
        [Required]
        public virtual int AssignedAssessmentFormId { get; set; }
        [Index("AK_AssessmentFormDetail", 2, IsUnique = true)]
        [ForeignKey("AssignedCompetencyCategoryDetailId")]
        public virtual CompetencyCategoryDetail AssignedCompetencyCategoryDetail { get; set; }
        [Required]
        public virtual int AssignedCompetencyCategoryDetailId { get; set; }
        //[Index("AK_AssessmentFormDetail", 3, IsUnique = true)]
        [ForeignKey("AssignedRatingScaleId")]
        public virtual RatingScale AssignedRatingScale { get; set; }
        public virtual int? AssignedRatingScaleId { get; set; }
        public DateTime CreationDate { get; set; }
        [MaxLength(200)]
        public string CreatedBy { get; set; }
        public AssessmentFormDetail()
        {
            CreationDate = DateTime.Now;
            CreatedBy = System.Threading.Thread.CurrentPrincipal.Identity.Name;
        }
    }

...
Рейтинг: 0 / 0
LINQ Не вытягивает ссылочные сущности.
    #39670368
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic Hunterиз кеша без запроса к базе,

await db.SaveChangesAsync(); - а это типа query free?


Relic Hunterи не нарываться внезапно на NullReferense.
Трешак конечно. И этот мусор (я про код) идёт в продакшн? Пиши лучше чистые select-ы через ODBC, тогда риск

Relic Hunterнарываться внезапно на NullReferense сведешь к нулю.

P.S. Дай мне надежду, скажи, что этот код больше никто не видит.
...
Рейтинг: 0 / 0
LINQ Не вытягивает ссылочные сущности.
    #39670371
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic HunterВчера прочитал бэст практис один и чувак там высказал не плохую мысль: не использовать никакие ленивые загрузки, ни changetracking-и и доставать все вручную в LINK запросе, перечислив ссылочные сущности и их поля явно, чтобы не тащить лишнего и не нарываться внезапно на NullReferense. И я больше склонен с ним согласиться, чем нет. А так со схемой модели все в порядке, просто есть нюансы ;)

Да етить его налево... Сколька ж можно-та? Да сколько!?

Entity в его чистом виде, с лейзи, без лейзи -- вообще наплювать, прокси-не-прокси. Только для одного.
Для одного единственного случая.
Для изменения.
Всё. Мать ево за ногу.

Остальные запросы на чтение, вывод, экспорт, почитать, посмотерть -- исключительно через проекции.

Но нет же. Думают, а ничё такой микроскоп. Тяжёленький. Можно и гвозди позабивать.

Млээээ...... Ээээаааа....
...
Рейтинг: 0 / 0
LINQ Не вытягивает ссылочные сущности.
    #39670372
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic Hunter,

Если вкратце. Хочешь отредактировать -- Find. Модификация. SaveChanges.

Хочешь какую-то информацию просто прочитать и вывести -- проекции.
...
Рейтинг: 0 / 0
LINQ Не вытягивает ссылочные сущности.
    #39670373
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic Hunterпросто есть нюансы ;)

Нет никаких ньюансов, нужно понимание что и для чего сделано.
...
Рейтинг: 0 / 0
LINQ Не вытягивает ссылочные сущности.
    #39670375
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic Hunterи Find() вытаскивает сущность assessmentFormDetail из кеша без запроса к базе, в таком-же виде, как мы ее туда поместили

Да. Поэтому

1. кеши 1го уровня должны быть короткоживующие, т.е. контекст должен жить ровно одну бизнес-операцию
2. читать данные из Find -- НЕЛЬЗЯ, только для изменения
3. лейзи для чтения -- НЕЛЬЗЯ, только для изменения
...
Рейтинг: 0 / 0
LINQ Не вытягивает ссылочные сущности.
    #39670378
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

Што такое "проекции" по-вашему? Это? https://metanit.com/sharp/entityframework/4.2.php

Ну дак там ситуация, такая-же, либо в Select явно прописать все, что нужно вытянуть, либо Includes(). Без это связанные сущности не проинициализируются.
...
Рейтинг: 0 / 0
LINQ Не вытягивает ссылочные сущности.
    #39670381
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic Hunter,

нет.

Код: 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.
// это проекция
var list1 = db.Peoples
   .Where(...)
   .Select(p => new {
      p.Id, 
      p.FirstName,
      p.LastName
   })
   .ToList();

// это тоже проекция
var list2 = db.Peoples
   .Where(...)
   .ProjectTo<PeopleDto>()
   .ToList();

// это проекция с фильтрацией по проекции
var list3 = db.Peoples
   .ProjectTo<PeopleDto>()
   .Where(...)
   .ToList();

// а так делать можно только когда элементы из списка требуется ИЗМЕНИТЬ
var entityList = db.Peoples.Where(...).ToList();



никаких Include! никаких "связных сущностей", которые проинициализируются, для чтения данных из базы только проекции. даже если подмывает, ну вот здесь-то можно и сущность вытянуть, чо такого..
...
Рейтинг: 0 / 0
LINQ Не вытягивает ссылочные сущности.
    #39670384
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

Ок,

на твоем примере мне нужно по Id вытянуть пипла (одного, никаких то лист), а также имя города в котором он живет (св. сущность города один-ко-многим).

Каг?
...
Рейтинг: 0 / 0
LINQ Не вытягивает ссылочные сущности.
    #39670385
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

В общем идея понятна. В первом посте ты употребил слово "virtual", намекая на ленивую загрузку через навигационные свойства (не так-ли?), а в результате, когда как оказалось оно так нифига не работает, ты написал про проекции и ручную выборку, как и что делать. Наверное так и нужно делать, что я и писал постом раньше. Но это никак не отвечает на вопрос ТС.
...
Рейтинг: 0 / 0
LINQ Не вытягивает ссылочные сущности.
    #39670405
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,
Можно без проекции.
Ленивое свойство инициализируется в момент геттера к нему. Т.е. в момент запроса.
Он пример то сделал или нет?
...
Рейтинг: 0 / 0
LINQ Не вытягивает ссылочные сущности.
    #39670406
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аффтар!
Пример с одним полем Без Мусора будет или плакать 4-ю страницу будем?
...
Рейтинг: 0 / 0
LINQ Не вытягивает ссылочные сущности.
    #39670409
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttкеши 1го уровня должны быть короткоживующие, т.е. контекст должен жить ровно одну бизнес-операцию
+1
ТопикСтартерdb.Entry(assessmentFormDetail).State = EntityState.Modified;
Самому статус менять не Нужно.
Иначе нафига тогда EF?
...
Рейтинг: 0 / 0
LINQ Не вытягивает ссылочные сущности.
    #39670410
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic HunterhVostt,

Ок,

на твоем примере мне нужно по Id вытянуть пипла (одного, никаких то лист), а также имя города в котором он живет (св. сущность города один-ко-многим).

Каг?
Код: c#
1.
2.
3.
Customer customer21 = con.Customers.FirstOrDefault(c => c.id == 21); 
var город = customer21.Город;
var имя = город.Имя.
...
Рейтинг: 0 / 0
LINQ Не вытягивает ссылочные сущности.
    #39670452
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic Hunterкогда как оказалось оно так нифига не работает,

Пиши в MS - они не в курсе.
...
Рейтинг: 0 / 0
25 сообщений из 61, страница 2 из 3
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / LINQ Не вытягивает ссылочные сущности.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]