asp.net核心中的多对多关系和多选

时间:2018-05-04 07:36:12

标签: entity-framework razor asp.net-core

我试图用剃刀学习asp.net核心,我试图建立一个视频游戏数据库来跟踪已完成的游戏,我还没玩过的游戏等等。 / p>

但我有一个问题。我有一个表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,如果他们没有&#39 ; t存在)。但是我超越了这一点。

我不知道如何加载该列表中的开发人员列表,然后发布如何将这些选定项目保存在DeveloperXGame表中。

由于

1 个答案:

答案 0 :(得分:1)

您可以从上下文中删除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 在视图中传递开发者列表。您可以像官方文档here一样浏览此示例网站。希望它可以帮助您开始使用!