DropDownList Razor Pages для связи многих со многими с использованием подхода Code First и FluentAPI - PullRequest
0 голосов
/ 13 ноября 2018

Я установил отношения «многие ко многим» между двумя объектами, используя подход Code First. К сожалению, я не могу создать выпадающий список, чтобы выбрать другие значения и добавить его к объекту.

Можете ли вы указать ошибку или недостающую часть в моем коде?

public class Vacancy : IAuditable
{
public Vacancy(){}

/// <summary>
/// General properties
/// </summary>
public int Id { get; set; }

{removing code for simplicity}

/// <summary>
/// A vacancy could have many HBO-I Skills.
/// The ICollection contains a list of HBO-I Skills which consist the HBO-I Skills for the particular vacancy.
/// </summary>
public virtual ICollection<VacancyHBOISkill> VacancyHBOISkills { get; set; }

 }

public class HBOISkill : IAuditable
{
public HBOISkill(){}

/// <summary>
/// General properties
/// </summary>
public int Id { get; set; }

{removing code for simplicity}

/// <summary>
/// Many vacancies provides 1 or more HBO-I Skills.
/// </summary>
public virtual ICollection<VacancyHBOISkill> VacancyHBOISkills { get; set;             }     
}

таблица пересечений между вакансиями и HBOISkill

     public class VacancyHBOISkill
     {
        public int VacancyId { get; set; }
        public Vacancy Vacancy { get; set; }

        public int HBOISkillId { get; set; }
        public HBOISkill HBOISkill { get; set; }
     }

конфигурация для класса VacancyHBOISkill

   public void Configure(EntityTypeBuilder<VacancyHBOISkill> entityBuilder)
    {
        entityBuilder
        .HasKey(vh => new { vh.VacancyId, vh.HBOISkillId });
    }

Класс DbContext

{removing code for simplicity}

    /// <summary>
    /// Defining the database tables within our application
    /// </summary    
    public DbSet<Vacancy> Vacancy { get; set; }
    public DbSet<HBOISkill> HBOISkill { get; set; }
    public DbSet<VacancyHBOISkill> VacancyHBOISkill { get; set; }

     // Adding the Shadow Properties to database schemas when we creating the DbModel
    protected override void OnModelCreating(ModelBuilder builder)
    {
        {removing code for simplicity}

        /// <summary>
        /// Loading the configuration files for the entities
        /// </summary
        builder.ApplyConfiguration(new VacancyConfiguration());
        builder.ApplyConfiguration(new HBOISkillConfiguration());
        builder.ApplyConfiguration(new VacancyHBOISkillConfiguration());
    }

Код страницы моей бритвы:

    public IActionResult OnGet()
    {

    ViewData["TypeId"] = new SelectList(_context.VacancyType, "Id", "Name");
    ViewData["CategoryId"] = new SelectList(_context.Category, "Id", "Desc");
    //ViewData["VacancyHBOSKillId"] = new SelectList(_context.HBOISkill, "Id", "Name");

    return Page();
    }

    [BindProperty]
    public Vacancy Vacancy { get; set; }

    public IEnumerable<HBOISkill> HBOISkillList { get; set; }
    public IEnumerable<SelectListItem> GetHBOISkillSelectList()
    {
        return HBOISkillList
            .Select((hs, i) => new SelectListItem
            {
                Text = hs.Name.ToString(),
                Value = hs.Id.ToString()
                //Selected = hs.Id == Vacancy.VacancyHBOISkills.Add(Vacancy.Id, hs.Id)
            });
    }

Ниже вы найдете фотографии (скриншоты) моей базы данных (таблицы).

Таблицы базы данных
Вакансия
HBOISkill
VacancyHBOISkill

Заранее спасибо,
С уважением,
Халил

P.S. Я изменил имена классов с множественного числа на единственное, эти изменения не видны на (старых) снимках экрана.

...