Отношение многие ко многим и множественный выбор в ядре asp.net - PullRequest
0 голосов
/ 04 мая 2018

Я пытаюсь изучить ядро ​​asp.net с помощью бритвы и пытаюсь создать базу данных видеоигр, чтобы отслеживать готовые игры, игры, в которые я еще не играл, и т. Д.

Но у меня есть проблема. У меня есть стол Game и стол Developer. Поскольку в игре может быть много разработчиков, а у разработчика может быть много игр, вы создали третью таблицу DeveloperXGame. Они что-то вроде этого

public class Game
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class Developer
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class DeveloperXGame
{
    public int DeveloperId { get; set; }
    public int JuegoId { get; set; }
    public Developer Developer { get; set; }
    public Game Game { get; set; }
}

public class ApplicationDbContext : DbContext
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) 
        : base(options)
    {

    }

    public DbSet<Game> Game { get; set; }
    public DbSet<Developer> Developer { get; set; }
    public DbSet<DeveloperXGame> DeveloperXGame { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<DeveloperXGame>()
            .HasKey(m => new { m.DeveloperId, m.GameId });
    }
}

Я уже сделал страницы для разработчиков, поэтому сначала создаю их вручную. Сейчас я пытаюсь создать игры и хочу показать, где я могу выбрать одного или нескольких разработчиков из этого списка (следующим шагом будет попытка добавить их с помощью ajax через страницу игр, если их не существует) , Но я заблудился за этой точкой.

Я не знаю, как загрузить список разработчиков в этом списке, а затем опубликовать статью о том, как сохранить эти выбранные элементы в таблице DeveloperXGame.

Спасибо

1 Ответ

0 голосов
/ 04 мая 2018

Вы можете удалить public DbSet<DeveloperXGame> DeveloperXGame { get; set; } из своего контекста.

Index.cshtml.cs

public class IndexModel : PageModel
{
    private readonly ApplicationDbContext _context;

    public IndexModel(ApplicationDbContext context)
    {
        _context = context;
    }

    public Game Game { get; set; }
    public IEnumerable<int> Developers { get; set; }
    public IEnumerable<SelectListItem> DeveloperList { get; set; }
    public IActionResult OnGet()
    {
        var developers = from m in _context.Developers
                     select m;
        DeveloperList = developers.Select(m => new SelectListItem { Value = m.Id.ToString(), Text = m.Name });
        return Page();
    }
}

Вот вид Index.cshtml

@page
@model RazorPages.TestGame.Pages.Games.IndexModel
@{
   ViewData["Title"] = "Index";
}

<div class="row">
<div class="col-md-4">
    <form method="post">
        <div class="form-group">
            <label asp-for="Game.Name" class="control-label"></label>
            <input asp-for="Game.Name" class="form-control" />
        </div>
        <div class="form-group">
            <label asp-for="Developers" class="control-label"></label>
            <select asp-for="Developers" asp-items="Model.DeveloperList">
                <option value="">All</option>
            </select>
        </div>
        <div class="form-group">
            <input type="submit" value="Create" class="btn btn-default" />
        </div>
    </form>
</div>

Вы также можете использовать ViewData для передачи вашего списка разработчиков в вашем представлении. Вы можете просмотреть этот образец сети, как в официальном документе здесь . Надеюсь, это поможет вам начать!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...