powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / связанная таблица недоступна (Include)
6 сообщений из 6, страница 1 из 1
связанная таблица недоступна (Include)
    #39547788
наутилус
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имею код
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
            Dictionary<User, int> dictionary = new Dictionary<User, int>();

            using (var context = new ContextBase(_connectionString))
            {
                var result = context.Users.Include(x => x.Detail)
                    .Where(condition)
                    .Select(u => new { user = u, Count = u.FFRequests.Count(fr => fr.DateCreated >= dateStart && fr.DateCreated < dateEnd) }).OrderByDescending(r => r.Count).Take(topN);


                result.ToList().ForEach(item => dictionary.Add(item.user, item.Count));

            }
            Console.WriteLine("debug");

            return dictionary;



в переменную dictionary user попадает без связанной таблицы Detail. Detail = null, хотя
я указываю Include(x => x.Detail)

как мне после выхода из using получить доступ к полю user.Detail?
-
Чудеса случаются. Это Вам любой программист скажет.
...
Рейтинг: 0 / 0
связанная таблица недоступна (Include)
    #39547794
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
наутилус,

пропущен virtual ?
...
Рейтинг: 0 / 0
связанная таблица недоступна (Include)
    #39547804
наутилус
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refreg,

нет, в других методах нормально используется, и инклюд добавляется, данные возвращаются.
как я понимаю тут создается
Код: c#
1.
.Select(u => new { user = u


и далее в словарь добавляем
Код: c#
1.
dictionary.Add(item.user,



вот где-то на этом моменте видимо надо добавлять Include или ещё как-то указать, что бы user вытягивался полностью?
...
Рейтинг: 0 / 0
связанная таблица недоступна (Include)
    #39547807
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
наутилус,

Покажи определение User. Похоже и правда пропущен virtual. А вообще, надо использовать проекции.
...
Рейтинг: 0 / 0
связанная таблица недоступна (Include)
    #39547811
наутилус
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
    
public class User : BaseEntity, ISignalrNotification
    {
.....
        public virtual UserDetail Detail { get; set; }4
.....
    }

    public class UserDetail
    {
        [Key]
        [ForeignKey("User")]
        public int UserId { get; set; }
        public virtual User User { get; set; }
....
    }



в других методах я использую Include, данные подтягиваются нормально.

вот полностью метод, в котором не могу добавить Include (или неправильно это делаю)
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
        public Dictionary<User, int> GetTopFRequestContributors(int topN, DateTime dateStart, DateTime dateEnd, Expression<Func<User, bool>> condition)
        {
            Dictionary<User, int> dictionary = new Dictionary<User, int>();

            using (var context = new ContextBase(_connectionString))
            {
                var result = context.Users.Include(x => x.Detail)
                    .Where(condition)
                    .Select(u => new
                                 {    user = u
                                    , Count = u.FFRequests.Count(fr => fr.DateCreated >= dateStart && fr.DateCreated < dateEnd)
                                 }).OrderByDescending(r => r.Count).Take(topN).Include(x => x.user.Detail);


                result.Include(u => u.user.Detail).ToList().ForEach(item => dictionary.Add(item.user, item.Count));

            }
            Console.WriteLine("debug");

            return dictionary;

        }



добавил в result "}).OrderByDescending(r => r.Count).Take(topN) .Include(x => x.user.Detail) ";
он выполняется, но во время добавления в dictionary

получаю ошибку
The result type of the query is neither an EntityType nor a CollectionType with an entity element type. An Include path can only be specified for a query with one of these result types.

hVostt, я читаю форум, видел Ваши посты, что за инклюд вы у себя жестоко караете и везде пишете о проекциях. можно где-то по русски почитать о них?
...
Рейтинг: 0 / 0
связанная таблица недоступна (Include)
    #39547821
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
наутилус,

Инклюд будет работать только при прямой выборке:

Код: c#
1.
var list = dbContext.Users.Include(p => p.Details).ToList();



Здесь будет работать инклюд.
А вообще надо использовать проекции:

Код: c#
1.
var list = Mapper.ProjectTo<UserDto>().ToList();



Подробней здесь: https://github.com/AutoMapper/AutoMapper/wiki/Projection
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / связанная таблица недоступна (Include)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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