powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / EF. связь многие ко многим через подчиненную таблицу
4 сообщений из 4, страница 1 из 1
EF. связь многие ко многим через подчиненную таблицу
    #38472903
__Pavel__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток!

Вот разбираюсь с Code First, необходимо сделать БД с тремя таблицами и связать две из них через третью связью многие ко многим. Вот кодовое представление базы:
Код: 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.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.Entity;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace TestProject.NET
{
    public class Problem
    {
        public Problem()
        {
            P_A = new List<Problem_Approval>();
        }

        [Key]
        public int ID_P { get; set; }
        [Required, MaxLength(1000)]
        public string Name { get; set; }
        public int Chance { get; set; }
        public int Chance_Real { get; set; }

        public virtual List<Problem_Approval> P_A { get; set; }
    }

    public class Approval
    {
        public Approval()
        {
            P_A = new List<Problem_Approval>();
        }

        [Key]
        public int ID_A { get; set; }
        [Required, MaxLength(1000)]
        public string Name { get; set; }
        public int Chance { get; set; }
        public int Type { get; set; }

        public virtual List<Problem_Approval> P_A { get; set; }
    }

    public class Problem_Approval
    {
        [Key]
        public int ID { get; set; }
        [Required]
        public int ID_P { get; set; }
        [Required]
        public int ID_A { get; set; }

        [ForeignKey("ID_P")]
        public virtual Problem Problem { get; set; }
        [ForeignKey("ID_A")]
        public virtual Approval Approval { get; set; }
    }

    public class MyContext : DbContext
    {
        public MyContext() : base("MyContext") { }

        public DbSet<Problem> Problems { get; set; }
        public DbSet<Approval> Approvals { get; set; }
        public DbSet<Problem_Approval> Problems_Approvals { get; set; }
    }
}



Собственно вопросы:
1) правильно ли я сделал связи?
2) Куча статей как делать запросы когда связаны 2 таблицы на прямую и нигде не нашел как делать запросы к 2-ум таблицам связанным через 3-ю. Был бы очень благодарен за представление примера как вывести все Approvals, связанные с Problem с фильтром по ProblemID (ID_P).
Или хотя бы статейку (желательно на русском) про то как это делается :)

Заранее благодарю!
...
Рейтинг: 0 / 0
EF. связь многие ко многим через подчиненную таблицу
    #38473014
__Pavel__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И снова здравствуйте!)

Не поверите, как написал пост, сразу нашел статью отдаленно напоминающую мою проблему и все заработало!
Но прошу все же ответить на мой 1 вопрос и еще прокомментировать правильность данного запроса:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
            using (var db1 = new MyContext())
            {
                var q1 = from p in db1.Problems
                        where p.ID_P == 1
                        from a in db1.Approvals
                        where a.ID_A < 3
                        join j in db1.Problems_Approvals
                        on new { p.ID_P, a.ID_A }
                        equals new { j.ID_P, j.ID_A }
                        into res
                        from r in res
                        select a;
                q1.Load();
                dataGridView1.DataSource = db1.Approvals.Local.ToBindingList();
            }  



Что-то мне подсказывает что я там лишнего налепил давайте, кидайте камни, мне полезно будет :)
...
Рейтинг: 0 / 0
EF. связь многие ко многим через подчиненную таблицу
    #38475447
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Pavel__,

Код: 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.
37.
38.
39.
40.
41.
42.
43.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.Entity;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace TestProject.NET
{
    public class Problem
    {
        [Key]
        public int ID_P { get; set; }
        [Required, MaxLength(1000)]
        public string Name { get; set; }
        public int Chance { get; set; }
        public int Chance_Real { get; set; }

        public virtual Collection<Approval> Approvals { get; set; }
    }

    public class Approval
    {
        [Key]
        public int ID_A { get; set; }
        [Required, MaxLength(1000)]
        public string Name { get; set; }
        public int Chance { get; set; }
        public int Type { get; set; }

        public virtual Collection<Problem> Problems { get; set; }
    }

    public class MyContext : DbContext
    {
        public MyContext() : base("MyContext") { }

        public DbSet<Problem> Problems { get; set; }
        public DbSet<Approval> Approvals { get; set; }
    }
}



вот и всё.
...
Рейтинг: 0 / 0
EF. связь многие ко многим через подчиненную таблицу
    #38475448
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Pavel__Был бы очень благодарен за представление примера как вывести все Approvals, связанные с Problem с фильтром по ProblemID (ID_P).
Или хотя бы статейку (желательно на русском) про то как это делается :)

Код: c#
1.
2.
3.
4.
from a in context.Approvals
from p in a.Problems
where p.ID_P == id
select a
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / EF. связь многие ко многим через подчиненную таблицу
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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