Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# ASP.NET MVC
Войти
Регистрация
Восстановить пароль
 
failoob
0 / 0 / 2
Регистрация: 19.12.2016
Сообщений: 2
#1

Entity Famework не загружает коллекции элементов в связи многие ко многим - C# MVC

20.08.2017, 18:58. Просмотров 271. Ответов 1

Доброго времени суток. У меня имеется следующая схема БД, сгенерированная Entity Framework.
Entity Famework не загружает коллекции элементов в связи многие ко многим
Для ее генерации я написал следующие сущности:
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
public class Company
    {
        public int companyId { get; set; }
        public string name { get; set; }
    }
 
public class Department
    {
        public int departmentId { get; set; }
        public string name { get; set; }
        public int companyId { get; set; }
        [ForeignKey("companyId")]
        public Company company { get; set; }
        [Column("headId")]
        public int? employeeId { get; set; }
        [ForeignKey("employeeId")]
        public Employee employee { get; set; }
 
        public ICollection<Employee> Employees { get; set; }
        public Department()
        {
            Employees = new List<Employee>();
        }
 
 public class Employee
    {
        public int employeeId { get; set; }
        public string surname { get; set; }
        public string firstname { get; set; }
        public string middlename { get; set; }
        public decimal salary { get; set; }
        public ICollection<Department> Departments { get; set; }
        public Employee()
        {
            Departments = new List<Department>();
        }
Сущности Employee и Department связываются связью один ко многим. Для того, чтобы явно прописать это отношение я использовал Fluent API:

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
public class TestContext : DbContext
    {
        public DbSet<Company> Companies { get; set; }
        public DbSet<Department> Departments { get; set; }
        public DbSet<Employee> Employes {get; set;}
       
        static TestContext()
        {
            Database.SetInitializer<TestContext>(new StoreDbInitializer());//Инициализируем БД
        }
        public TestContext(string connectionString)
            : base(connectionString)
        {
 
        }
 
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Department>()
                .HasMany(d => d.Employees)
                .WithMany(e => e.Departments)
                .Map(m=>
            {
                m.ToTable("DepEmp");
 
                m.MapLeftKey("departmentId");
                m.MapRightKey("employeeId");
            });
        }
    }
    class StoreDbInitializer : CreateDatabaseIfNotExists<TestContext>
    {
 
    }
Проблема в следующем, при попытке получить всех сотрудников отдела (т.е. всех Employee в Department) я получаю null, то же самое если я хочу найти всех сотрудников в отделе(ищу Department у Employee).
Всех сотрудников получаю следующим образом:
C#
1
2
3
4
5
6
7
public IEnumerable<EmployeeDTO> GetEmployes(DepartmentDTO departmentDto)
        {
            var department = Database.Departments.Get(departmentDto.departmentId);
            var employees = department.Employees;// Вытаскиваю коллекцию всех сотрудников отдела
            Mapper.Initialize(cfg => cfg.CreateMap<Employee, EmployeeDTO>());
            return Mapper.Map<IEnumerable<Employee>, List<EmployeeDTO>>(employees);
        }
И получаю такой результат:
Entity Famework не загружает коллекции элементов в связи многие ко многим
При всем этом новые работники добавляются в базу данных и в таблице DepEmp создаются ссылки на сущности.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.08.2017, 18:58
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Entity Famework не загружает коллекции элементов в связи многие ко многим (C# MVC):

Entity framework, связь многие ко многим
Доброго времени суток ! Зарание извиняюсь если поместил тему не в тот...

Entity Framework многие-ко-многим
Добрый день! Прошу прощения, если создал тему не в том разделе. Ситуация...

Представление. Создание связи многие-ко-многим
Добрый день! Недавно начал изучать MVC. Возник такой вопрос: как в...

Реализация связи многие ко многим в WebApi
В мене є дві моделі - книжка і автор. Коли створюємо книжку можемо вибрати...

Как осуществить поиск данных по базе данных по связи многие-ко-многим
Репозиторий SqlApplicantRepository namespace theModel.Repository { ...

Отношение Многие ко Многим
Добрый день, недавно начал осваивать Асп.нет, и хотелось бы реализовать связь...

1
Gekr
41 / 42 / 31
Регистрация: 01.10.2012
Сообщений: 185
Завершенные тесты: 1
20.08.2017, 23:20 #2
Неправильно используете Entity Framework

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public IEnumerable<EmployeeDTO> GetDepartmenBytId(int id)
        {
            using (TestContext context = new TestContext())
            {
                var department = context.Departments
                                        .Where(d => d.Id == id)
                                        .Include("Employees") 
                                        .FirstOrDefault(); 
 
                Mapper.Initialize(cfg => cfg.CreateMap<Employee, EmployeeDTO>());
 
                return Mapper.Map<IEnumerable<Employee>, List<EmployeeDTO>>(department.Employees);
            }
        }
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.08.2017, 23:20
Привет! Вот еще темы с решениями:

MysqlEntity - связь многие ко многим
Всем привет. Есть таблица &quot;ученик&quot;и &quot;предмет&quot;. Между ними стоит связь многие ко...

Модель со связью многие-ко-многим
Уже голова кругом :wall: (Учусь на MVC 5) Есть класс User и Command со связью...

Сохранение данных со связью многие-ко-многим
Здравствуйте, делаю сохранение данных, связь многие-ко-многим, то есть,...

Заполнение таблиц с связью многие-ко-многим
Есть две таблицы Artists и Performers. Между ними установлена связь многие ко...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru