powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / SQLite, EntityFrameworkCore: include не работает
25 сообщений из 25, страница 1 из 1
SQLite, EntityFrameworkCore: include не работает
    #39547920
хорошо я согласен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
People и Orders связаны "многие ко многим" через OrdersToPeople
Код: c#
1.
2.
3.
4.
5.
6.
7.
var list = myDbContext.People
    .Include(t => t.OrdersToPeople);
foreach (var element in list)
{
    var c = element.OrdersToPeople.Count;
    //c всегда равен 0. Хотя своими глазами вижу, что в БД записи есть.
}



list загружается, все простые поля (int, string) в нём заполнены. А вот таблица OrdersToPeople пустая. Почему - понять не могу.
...
Рейтинг: 0 / 0
SQLite, EntityFrameworkCore: include не работает
    #39547926
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хорошо я согласен,

либо связи не установлены, либо нет virtual
...
Рейтинг: 0 / 0
SQLite, EntityFrameworkCore: include не работает
    #39547929
хорошо я согласен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все классы DbContext были сгенерированы с помощью SQLite Tools. Связи есть, поскольку если б их не было, тогда бы и поля соответствующего в People не сгенерировалось бы.
Ничего особенного в DbContext нет, всё оформлено как положено, все доп.поля через virtual
Код: c#
1.
2.
3.
4.
5.
6.
public partial class MyDbContext : DbContext
{
    public virtual DbSet<People> People { get; set; }
    public virtual DbSet<OrdersToPeople> OrdersToPeople { get; set; }
    public virtual DbSet<Orders> Orders { get; set; }
    ...


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public partial class People
{
    public long Id { get; set; }
    public string Surname { get; set; }
    public string Name { get; set; }
    public virtual ICollection<OrdersToPeople> OrdersToPeople { get; set; }
    public People()
    {
        OrdersToPeople = new HashSet<OrdersToPeople>();
    }
}


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
public partial class OrdersToPeople
{
    public long Id{ get; set; }
    public long PeopleId { get; set; }
    public long OrderId { get; set; }
    public virtual People People { get; set; }
    public virtual Orders Orders { get; set; }
}

...
Рейтинг: 0 / 0
SQLite, EntityFrameworkCore: include не работает
    #39547960
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хорошо я согласен
Код: c#
1.
OrdersToPeople = new HashSet<OrdersToPeople>();

А это зачем?
...
Рейтинг: 0 / 0
SQLite, EntityFrameworkCore: include не работает
    #39548026
хорошо я согласен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refreg,

мне так SQLite Tools нагенерировал. Пробовал все HashSet и ICollection заменить на List - эффект тот же. include не работает.
...
Рейтинг: 0 / 0
SQLite, EntityFrameworkCore: include не работает
    #39548056
хорошо я согласен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм.
Если немного расширить код
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
var list = myDbContext.People
    .Include(t => t.OrdersToPeople);
var experiment = myDbContext.OrdersToPeople
foreach (var element in experiment)
{
    //не важно. Главное, что список прочитался
}
foreach (var element in list)
{
    var c = element.OrdersToPeople.Count;
    //Теперь c == 2. Т.е. теперь всё нормально прочиталось.
}


Разве не должно было прочитаться сразу? Почему только при попытке получения доступа?
...
Рейтинг: 0 / 0
SQLite, EntityFrameworkCore: include не работает
    #39548062
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хорошо я согласен,
А почему вы тему не в той ветке?
...
Рейтинг: 0 / 0
SQLite, EntityFrameworkCore: include не работает
    #39548065
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хорошо я согласен,

я не вижу атрибута InverseProperty .
...
Рейтинг: 0 / 0
SQLite, EntityFrameworkCore: include не работает
    #39548073
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хорошо я согласенсгенерированы с помощью SQLite Tools.
Нагенерированы из чего?
Второй класс какой то странный для один ко много.
Дублирование полей, какая то коллекция...
Дайте бд схему с которорой была генерация.
Или схему что нагенерит код, если это коде first.
...
Рейтинг: 0 / 0
SQLite, EntityFrameworkCore: include не работает
    #39548076
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttхорошо я согласен,

я не вижу атрибута InverseProperty .

В целом конвенции конечно работают, но лучше фиксировать атрибутами или конфигурацией отражения.
...
Рейтинг: 0 / 0
SQLite, EntityFrameworkCore: include не работает
    #39548094
хорошо я согласен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Нагенерированы из чего?
Я создал БД, соединил все таблицы связями. А потом с помощью SQLiteTools сгенерировал серию классов dbContext из это БД.
Есть два способа: либо с помощью атрибутов, либо путём указания всех связей и зависимостей в классе MyDbContext: DbContext, в функции
Код: c#
1.
protected override void OnModelCreating(ModelBuilder modelBuilder)


что я и сделал.
...
Рейтинг: 0 / 0
SQLite, EntityFrameworkCore: include не работает
    #39548096
хорошо я согласен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Дайте бд схему с которорой была генерация.
Или схему что нагенерит код, если это коде first.
так я ж привёл.
Просто две таблицы People и Orders, соединённых с помощью промежуточной. Нагенерированный код я привёл в сообщении выше - 20928086
...
Рейтинг: 0 / 0
SQLite, EntityFrameworkCore: include не работает
    #39548103
хорошо я согласен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче, приведу более конкретный пример:
Код: c#
1.
2.
3.
4.
5.
var a = myDbContext.People
    .Include(t => t.OrdersToPeople).ToList();
var b = a[0].OrdersToPeople.Count; // b равно нулю
var c = myDbContext.OrdersToPeople.ToList();
var d = a[0].OrdersToPeople.Count; // d равно 2


Разве include не должен был подгрузить нужную информацию так, чтобы b была равна двум? Обязательно мне делать фиктивное обращение индвивидуально для OrdersToPeople?
...
Рейтинг: 0 / 0
SQLite, EntityFrameworkCore: include не работает
    #39548110
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хорошо я согласенPetro123Дайте бд схему с которорой была генерация.
Или схему что нагенерит код, если это коде first.
так я ж привёл.
Просто две таблицы People и Orders, соединённых с помощью промежуточной. Нагенерированный код я привёл в сообщении выше - 20928086
Не вижу СХЕМУ БАЗЫ.
Я недавно в шара, но базы знаю хорошо)
...
Рейтинг: 0 / 0
SQLite, EntityFrameworkCore: include не работает
    #39548116
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123в шара,в шарпе)
...
Рейтинг: 0 / 0
SQLite, EntityFrameworkCore: include не работает
    #39548152
хорошо я согласен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Не вижу СХЕМУ БАЗЫ.
...
Рейтинг: 0 / 0
SQLite, EntityFrameworkCore: include не работает
    #39548181
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хорошо я согласен,
здорово.
Теперь было бы здорово включить отладку в EF и показать реальный запрос к базе от linq.
Либо поискать на фразу EF +"много ко много"
...
Рейтинг: 0 / 0
SQLite, EntityFrameworkCore: include не работает
    #39548185
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хорошо я согласен,
Вот я пример нагуглил:
Код: 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.
public class Team
{
    public int Id { get; set; }
    public string Name { get; set; }
 
    public ICollection<Player> Players { get; set; }
    public Team()
    {
        Players = new List<Player>();
    }
}
public class Player
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Position { get; set; }
    public int Age { get; set; }
 
    public ICollection<Team> Teams { get; set; }
    public Player()
    {
        Teams = new List<Team>();
    }
}


А у вас что там нагенерила приблуда?
...
Рейтинг: 0 / 0
SQLite, EntityFrameworkCore: include не работает
    #39548231
хорошо я согласен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123А у вас что там нагенерила приблуда?
А вот у меня она ещё и промежуточную таблицу нагенерила.
Именно её нагенерированный код я и привёл выше:
Код: c#
1.
2.
3.
4.
5.
6.
public partial class MyDbContext : DbContext
{
    public virtual DbSet<People> People { get; set; }
    public virtual DbSet<OrdersToPeople> OrdersToPeople { get; set; }
    public virtual DbSet<Orders> Orders { get; set; }
    ...


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public partial class People
{
    public long Id { get; set; }
    public string Surname { get; set; }
    public string Name { get; set; }
    public virtual ICollection<OrdersToPeople> OrdersToPeople { get; set; }
    public People()
    {
        OrdersToPeople = new HashSet<OrdersToPeople>();
    }
}


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
public partial class OrdersToPeople
{
    public long Id{ get; set; }
    public long PeopleId { get; set; }
    public long OrderId { get; set; }
    public virtual People People { get; set; }
    public virtual Orders Orders { get; set; }
}


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public partial class Orders
{
    public long Id { get; set; }
    public string Name { get; set; }
    public string Count { get; set; }
    public virtual ICollection<OrdersToPeople> OrdersToPeople { get; set; }
    public Orders()
    {
        OrdersToPeople = new HashSet<OrdersToPeople>();
    }
}


...
Рейтинг: 0 / 0
SQLite, EntityFrameworkCore: include не работает
    #39548234
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хорошо я согласен,

Код: c#
1.
2.
var a = myDbContext.People
    .Include(t => t.OrdersToPeople.Select(p => p.People)).ToList();



А вообще, надо избавиться от класса OrdersToPeople, он не нужен в данном случае.
...
Рейтинг: 0 / 0
SQLite, EntityFrameworkCore: include не работает
    #39548265
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хорошо я согласен,
И ты её/его не спросил, когда нужно генерить, а когда нет промежуточную?
Я вот, знаю, что если это сущность, то нужно.
У тебя в базе полей дополнительных нет.
Значит это не сущность и генерить класс не нужно.
Логично?
...
Рейтинг: 0 / 0
SQLite, EntityFrameworkCore: include не работает
    #39548314
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Радуйтесь адепты DbContext!

За Вас все сделала студия!
...
Рейтинг: 0 / 0
SQLite, EntityFrameworkCore: include не работает
    #39548417
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хорошо я согласенrefreg,

мне так SQLite Tools нагенерировал. Пробовал все HashSet и ICollection заменить на List - эффект тот же. include не работает.Зачем вообще это инициализировать? EF за тебя это сам сделает.


hVosttхорошо я согласен,

Код: c#
1.
2.
var a = myDbContext.People
    .Include(t => t.OrdersToPeople.Select(p => p.People)).ToList();


hVostt, поясни, плз.


хорошо я согласенКороче, приведу более конкретный пример:
Код: c#
1.
2.
3.
var a = myDbContext.People
    .Include(t => t.OrdersToPeople).ToList();
var b = a[0].OrdersToPeople.Count; // b равно нулю


Было бы интересно глянуть сформированный запрос. Здесь запрос должен быть один, и содержать join.
...
Рейтинг: 0 / 0
SQLite, EntityFrameworkCore: include не работает
    #39548613
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refreghVosttхорошо я согласен,

Код: c#
1.
2.
var a = myDbContext.People
    .Include(t => t.OrdersToPeople.Select(p => p.People)).ToList();



hVostt, поясни, плз.

Вообще, класс OrdersToPeople не нужен, связь многие-ко-многие EF реализует связующей таблицей и скрывает её наличие от пользователя, просто нужен Peoples с одной стороны и Orders с другой.
...
Рейтинг: 0 / 0
SQLite, EntityFrameworkCore: include не работает
    #39548756
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttrefregпропущено...
hVostt, поясни, плз.

Вообще, класс OrdersToPeople не нужен, связь многие-ко-многие EF реализует связующей таблицей и скрывает её наличие от пользователя, просто нужен Peoples с одной стороны и Orders с другой.Тогда, видимо, имелось ввиду:
Код: c#
1.
2.
var a = myDbContext.People
    .Include(t => t.OrdersToPeople.Select(p => p.Orders )).ToList();

или
Код: c#
1.
2.
var a = myDbContext.Orders
    .Include(t => t.OrdersToPeople.Select(p => p.People )).ToList();
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / SQLite, EntityFrameworkCore: include не работает
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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