Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 LINQ Не вытягивает ссылочные сущности.  [new]
Relic Hunter
Member

Откуда: AB
Сообщений: 7431
Так... Обнаружил свое не понимание в работе с EF сегодня.
Есть, например, сущности Employees -> Depatrments. И запрос
var emp = await db.Employee.Where(p => p.Id == Id).SingleOrDefaultAsync(); 

пытаюсь добраться до имени отдела.
String name = emp.AssignedDepartment.DepartmentName;

облом AssignedDepartment NULL
приходится делать инклюд
var emp = await db.Employee.Where(p => p.Id == Id).Include(p => p.AssignedDepartment).SingleOrDefaultAsync(); 

Через Find добраться вообще не получается, все ссылочные сущности NULL.
var emp = await db.Employee.FindAsync(Id);

Я грешным делом думал, что оно тянется автоматически. Ан нет.
29 июн 18, 20:14    [21532141]     Ответить | Цитировать Сообщить модератору
 Re: LINQ Не вытягивает ссылочные сущности.  [new]
Relic Hunter
Member

Откуда: AB
Сообщений: 7431
А вот в этом примере никаких инклюдов писать не надо, все вытягиваются автоматически
totalPosition = db.AssessmentFormDetails
.Where(p => (p.AssignedAssessmentFormId == Id && p.AssignedCompetencyCategoryDetail.AssignedCompetencyCategory.AssignedCompetencyId == 1))
.Average(o => o.AssignedRatingScale.Rate);

Это потому что их упомянули в Where or Average???
29 июн 18, 20:31    [21532164]     Ответить | Цитировать Сообщить модератору
 Re: LINQ Не вытягивает ссылочные сущности.  [new]
hVostt
Member

Откуда:
Сообщений: 18561
Relic Hunter,

virtual
29 июн 18, 21:11    [21532203]     Ответить | Цитировать Сообщить модератору
 Re: LINQ Не вытягивает ссылочные сущности.  [new]
Relic Hunter
Member

Откуда: AB
Сообщений: 7431
hVostt
Relic Hunter,

virtual
Все мемберы virtual. А вот к AssessmentForm без инклюда не удается. Что не так?
+
    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;
        }
    }
29 июн 18, 22:39    [21532289]     Ответить | Цитировать Сообщить модератору
 Re: LINQ Не вытягивает ссылочные сущности.  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38640
Relic Hunter,

Зачем тут кругом асинхронность если результат нужен сразу?
29 июн 18, 23:28    [21532354]     Ответить | Цитировать Сообщить модератору
 Re: LINQ Не вытягивает ссылочные сущности.  [new]
Relic Hunter
Member

Откуда: AB
Сообщений: 7431
hVostt,

Petro123
Relic Hunter,

Зачем тут кругом асинхронность если результат нужен сразу?
Присоединяюсь с вопросом )))
29 июн 18, 23:53    [21532381]     Ответить | Цитировать Сообщить модератору
 Re: LINQ Не вытягивает ссылочные сущности.  [new]
hVostt
Member

Откуда:
Сообщений: 18561
Petro123
Relic Hunter,

Зачем тут кругом асинхронность если результат нужен сразу?


Кажись ты не понимаешь что такое асинхронность.
30 июн 18, 00:14    [21532405]     Ответить | Цитировать Сообщить модератору
 Re: LINQ Не вытягивает ссылочные сущности.  [new]
hVostt
Member

Откуда:
Сообщений: 18561
Relic Hunter,

Пока сложно сказать, может маппинг, может трекинг отключён, может ещё что. Какой EF?
30 июн 18, 00:28    [21532429]     Ответить | Цитировать Сообщить модератору
 Re: LINQ Не вытягивает ссылочные сущности.  [new]
Идеальный П.
Member

Откуда:
Сообщений: 1353
hVostt
Relic Hunter,

Пока сложно сказать, может маппинг, может трекинг отключён, может ещё что. Какой EF?

 <package id="EntityFramework" version="6.1.1" targetFramework="net451" />

Как-то не совсем хорошо получается, нарываться на эти NULL в рантайме. За что боролись? Думалось EF это - полностью контролируемый дизайн-тайм. Да и не всегда вспомнишь про эти иклюды, а код компилируется на ура ))
30 июн 18, 02:10    [21532520]     Ответить | Цитировать Сообщить модератору
 Re: LINQ Не вытягивает ссылочные сущности.  [new]
Relic Hunter
Member

Откуда: AB
Сообщений: 7431
Ппц. Если ссылочные сущности уже в кеше ЕФ (1), то они вытаскиваются потом уже и без инклюда, и find их вытягивает, а если нет (2), то получаем NULL.

+
(1)работает
            var formDetails = await db.AssessmentFormDetails.Where(p => p.Id == Id).Include(p => p.AssignedRatingScale).Include(p => p.AssignedCompetencyCategoryDetail).SingleOrDefaultAsync();

            var formDetails2 = db.AssessmentFormDetails.Where(p => p.Id == Id).SingleOrDefault();

            var card =  db.AssessmentFormDetails.Find(Id);

(2)не работает, вылетает по null, если обрашаться к ссылочным сущностям

            ///var formDetails = await db.AssessmentFormDetails.Where(p => p.Id == Id).Include(p => p.AssignedRatingScale).Include(p => p.AssignedCompetencyCategoryDetail).SingleOrDefaultAsync();

            var formDetails2 = db.AssessmentFormDetails.Where(p => p.Id == Id).SingleOrDefault();

            var card =  db.AssessmentFormDetails.Find(Id);

картонный домик рассыпается на глазах.
30 июн 18, 02:38    [21532524]     Ответить | Цитировать Сообщить модератору
 Re: LINQ Не вытягивает ссылочные сущности.  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38640
hVostt
Petro123
Relic Hunter,

Зачем тут кругом асинхронность если результат нужен сразу?


Кажись ты не понимаешь что такое асинхронность.

Может я че и не понял....проблемы автора).
Ленивая подгрузка работает таким образом:
Контекст.table1.table2.table3
.
И таким:
foreach table1 context.table1{
    table1.table2 // пойшел доп запрос в другую таблу
}
30 июн 18, 10:41    [21532727]     Ответить | Цитировать Сообщить модератору
 Re: LINQ Не вытягивает ссылочные сущности.  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38640
Если автор просто про ссылки в классе по композиции ООП....без указания отношений один ко многим и т.д.
То imho подгрузки автоматом быть и не должно.
30 июн 18, 10:54    [21532744]     Ответить | Цитировать Сообщить модератору
 Re: LINQ Не вытягивает ссылочные сущности.  [new]
refreg
Member

Откуда: Саратов
Сообщений: 778
Relic Hunter,

Проверь на всякий случай, чему равна
db.Configuration.LazyLoadingEnabled
должна быть true, чтобы код работал как ты ожидаешь
30 июн 18, 12:41    [21532872]     Ответить | Цитировать Сообщить модератору
 Re: LINQ Не вытягивает ссылочные сущности.  [new]
Агнец за бортом
Member

Откуда:
Сообщений: 1351
Идеальный П.
hVostt
Relic Hunter,

Пока сложно сказать, может маппинг, может трекинг отключён, может ещё что. Какой EF?

 <package id="EntityFramework" version="6.1.1" targetFramework="net451" />


Как-то не совсем хорошо получается, нарываться на эти NULL в рантайме. За что боролись? Думалось EF это - полностью контролируемый дизайн-тайм. Да и не всегда вспомнишь про эти иклюды, а код компилируется на ура ))


Покажи отношения в сущностям.
30 июн 18, 13:59    [21532950]     Ответить | Цитировать Сообщить модератору
 Re: LINQ Не вытягивает ссылочные сущности.  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38640
refreg
должна быть true
по умолчанию вкл. Но конечно пусть проверит.
30 июн 18, 14:02    [21532955]     Ответить | Цитировать Сообщить модератору
 Re: LINQ Не вытягивает ссылочные сущности.  [new]
refreg
Member

Откуда: Саратов
Сообщений: 778
Petro123
refreg
должна быть true
по умолчанию вкл. Но конечно пусть проверит.
Когда же ты заткнешься? Выпей чё-нить от поноса...
30 июн 18, 15:27    [21533017]     Ответить | Цитировать Сообщить модератору
 Re: LINQ Не вытягивает ссылочные сущности.  [new]
ViPRos
Member

Откуда:
Сообщений: 9883
refreg,

касторку
30 июн 18, 16:21    [21533072]     Ответить | Цитировать Сообщить модератору
 Re: LINQ Не вытягивает ссылочные сущности.  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38640
refreg,
Не пиши банальности.
Параметр по умолчанию включен.
Разумеется ты разозлился).
30 июн 18, 17:56    [21533170]     Ответить | Цитировать Сообщить модератору
 Re: LINQ Не вытягивает ссылочные сущности.  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 28155
Relic Hunter,

Аргентина - Франция пока 1:1

проверь на всякий случай, чему равно:
db.Configuration.LazyLoadingEnabled

должно быть true, чтобы код работал так как ты ожидаешь
30 июн 18, 18:00    [21533175]     Ответить | Цитировать Сообщить модератору
 Re: LINQ Не вытягивает ссылочные сущности.  [new]
refreg
Member

Откуда: Саратов
Сообщений: 778
Petro123
refreg,
Не пиши банальности.
Параметр по умолчанию включен.
Разумеется ты разозлился).
Банальности и глупости на этом форуме пишет только один человек...
30 июн 18, 22:19    [21533554]     Ответить | Цитировать Сообщить модератору
 Re: LINQ Не вытягивает ссылочные сущности.  [new]
hVostt
Member

Откуда:
Сообщений: 18561
Relic Hunter
картонный домик рассыпается на глазах.


Может, карточный? :)

Find работает из кеша первого уровня, да. Null, если отключена ленивая загрузка.
30 июн 18, 22:31    [21533573]     Ответить | Цитировать Сообщить модератору
 Re: LINQ Не вытягивает ссылочные сущности.  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38640
refreg
Банальности и глупости на этом форуме пишет только один человек...

Или по теме пиши, или полку дома прибей джуниор.
30 июн 18, 22:45    [21533595]     Ответить | Цитировать Сообщить модератору
 Re: LINQ Не вытягивает ссылочные сущности.  [new]
refreg
Member

Откуда: Саратов
Сообщений: 778
Petro123
refreg
Банальности и глупости на этом форуме пишет только один человек...

Или по теме пиши, или полку дома прибей джуниор.
Будешь модератором, будешь указывать что писать... Следи за собой...
1 июл 18, 00:51    [21533765]     Ответить | Цитировать Сообщить модератору
 Re: LINQ Не вытягивает ссылочные сущности.  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38640
refreg,
Ну дак я ставлю на то что чел просто связи не там и не те расставил.
А ты с параметром ошибся, да еще и нервный.
Это факты.
1 июл 18, 09:12    [21533945]     Ответить | Цитировать Сообщить модератору
 Re: LINQ Не вытягивает ссылочные сущности.  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 28155
Petro123,

где же это факты? пока что только догадки
1 июл 18, 09:20    [21533952]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Ответить