Entity Framework - список категорий

ADO.NET
  1. 6 месяцев(а)

    Добрый день.
    Сейчас осваиваю Entity Framework 6, столкнулся с вопросом и что-то не могу понять как его решить.
    Собственно, имею две модели (таблицы):

    Company:

        [Table("Companies")]
        public class Company
        {
            #region Properties - Свойства
    
            public int Id { get; set; }
    
            public string Name { get; set; }
    
            public virtual ObservableCollection<Phone> Phones { get; set; }
    
            #endregion
    
    
            #region Overrided Methods - Перегруженные методы
    
            public override string ToString()
            {
                return Name;
            }
    
            #endregion
        }

    Phone:

        [Table("Phones")]
        public class Phone
        {
    
            #region Properties - Свойства
    
            public int Id { get; set; }
    
            [Column("Name")]
            public string Name { get; set; }
    
            public double Price { get; set; }
    
            public int CompanyId { get; set; }
    
            public virtual Company Company { get; set; }
    
            #endregion
        }

    Создал TestContext:

        public class TestContext : DbContext
        {
            #region Contructors - Конструкторы
    
            public TestContext(): base("DefaultConnection")
            {
                
            }
    
            #endregion
    
            #region Properties - Свойства
    
            public DbSet<Company> Companies { get; set; }
    
            public DbSet<Phone> Phones { get; set; }
    
            #endregion
        }

    В ViewModel определил свойства и связал их с View. Данные моделей вывожу в ListView.

           #region Properties - Свойства
    
            /// <summary>
            /// Коллекция телефонов.
            /// </summary>
            public ObservableCollection<Phone> OurPhones
            {
                get { return _ourPhones; }
                set
                {
                    _ourPhones = value;
                    RaisePropertyChanged("OurPhones");
                }
            }
            private ObservableCollection<Phone> _ourPhones;
    
            /// <summary>
            /// Коллекция компаний.
            /// </summary>
            public ObservableCollection<Company> OurCompanies { get; set; }
            
            #endregion
    
            #region Methods - Методы
    
            private void LoadDataFromBase()
            {
                try
                {
                    
                    _testContext.Phones.Include(p => p.Company).Load();
    
                    _testContext.Database.Log = (s => Debug.WriteLine($"SQLite: {s}"));
    
                    _testContext.Companies.SelectMany(c => c.Phones).Load();
    
                    OurCompanies = _mobileContext.Companies.Local;
                }
                catch (Exception ex)
                {
                    Debug.WriteLine($"Error: {ex.Message}");
                    Debug.WriteLine($"Stack: {ex.StackTrace}");
                    MessageBox.Show($"Ошибка: {ex.Message}", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                }
            }
    
            #endregion

    Задача следующего характера: хочу выводить список компаний, при выборе компании загружается список доступных телефонов. Реализовал свойство SelectedCompany:

            /// <summary>
            /// Выбранная компания.
            /// </summary>
            public Company SelectedCompany
            {
                get { return _selectedCompany; }
                set
                {
                    if (value is Company)
                    {
                        _selectedCompany = value;
                        OurPhones = _selectedCompany.Phones;
                        RaisePropertyChanged("SelectedCompany");
                    }
                }
            }
            private Company _selectedCompany;

    Вопрос: Как сделать так, что бы в моём списке ListView на форме были все компании из таблицы Companies и дополнительно отображалась строка "Все компании" при нажатии на которую загружался бы список из всех доступных телефонов, как такое можно реализовать c помощью EF 6 без особых бубнов и костылей? :)

    Пытался костылить таким образом:

                    Company allComp = new Company { Id = 0, Name = "Все компании" };
    
                    foreach (Phone p in _mobileContext.Phones.Local)
                        allComp.Phones.Add(p);
    
                    OurCompanies = _mobileContext.Companies.Local;
    
                    OurCompanies.Add(allComp);

    Но при таком подходе у меня из всех моделей компаний исчезают телефоны и все они находятся в модели "Все компании"

    -image-

или зарегистрируйтесь чтобы ответить