簡體   English   中英

插入到 EF Core ASP.NET Core Razor Pages .NET6 中自動生成的 Bridge 表

[英]Insert to autogenerated Bridge table in EF Core ASP.NET Core Razor Pages .NET6

我是 EF 新手,需要幫助理解以下內容:我在數據庫中有一個 Class 表和一個學生表。 一個 Class 可以有多個學生,一個學生可以在多個班級。 我有一個由 EF 核心自動生成的表,名為 ClassModelStudent。 它有以下字段:

班級模型學生表

我創建了一個 razor 頁面來創建 class 並且在發布事件時,按鈕應該發送 ClassID 並重定向到 AddStudents 頁面。 在此處輸入圖像描述

以下是 AddStudents Class 的代碼:

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.Data.SqlClient;
using Microsoft.EntityFrameworkCore;
using TestProject.Model;

namespace TestProject.Pages.Classes
{
    public class EnrollmentModel : PageModel
    {
        private readonly TestProject.Data.TestProjectContext _context;

    public EnrollmentModel(TestProject.Data.TestProjectContext context)
    {
        _context = context;
    }
    [BindProperty]
   public Enrollment Enrollments { get; set; }   
    public SelectList Classes { get; set; }    
    public IList<Student> UserProfile { get; set; }
    [BindProperty(SupportsGet = true)]
    public string? SearchString { get; set; }
    public async Task OnGetAsync()
    {
        var students = from s in _context.User_Profile
                       select s;
        if (!string.IsNullOrEmpty(SearchString))
        {
            students = students.Where(s => s.FirstName.Contains(SearchString));
        }

        UserProfile = await students.ToListAsync();

        var classes = from i in _context.Class
                          orderby i.Description
                          select i;

        Classes = new SelectList(classes, "ClassID", 
"Description");

    }

    public async Task<IActionResult> OnPostAsync()
    {
        if (!ModelState.IsValid)
        {

            return Page();
        }
       //THIS IS WHERE I TRIED ACCESSING CLASSMODELSTUDENT TABLE 
      //AND THE CONTEXT DID NOT SEE IT
       // _context.e
        await _context.SaveChangesAsync();

        return RedirectToPage("./Index");
    }
}

}

我目前已將其連接到 Enrollments 表。 我什至不確定是否應該將其寫入自動生成的表 ClassModelStudents 或手動創建的 Enrollments? 注冊表如下所示:

報名表

在 AddStudents 頁面中,我在表格中顯示學生列表。 我在表格的每一行中創建了“添加到類”按鈕。 當單擊“添加到班級”按鈕時,我想將該學生添加到選定的 class 中。 我應該寫給 ClassModelStudents 表。 請看下面的 AddStudents 頁面截圖: 添加學生

我不明白的是如何為 ClassModelStudent 創建 class(模型)? 因為我無法使用上下文直接訪問此表。 如何訪問該表以將 ClassID 和 StudentID 寫入其中?

請指教..我非常感謝您的幫助..

當您在TestProjectContext中創建many-to-many關系時,您是否編寫代碼如下:

    .......

    public Dbset<Class> classes;
    public Dbset<students> students;

ClassModelStudent表是EF核心自動生成的,不能用_context.ClassModelStudent插入數據嗎?

如果你的問題和我上面提到的一樣,你可以用另一種方法來創建many-to-many關系,我寫了一個簡單的demo:

Model

 public class Group
    {
        public int Id { get; set; }
        public string GroupName { get; set; }
        public List<GroupMembers> GroupMembers { get; set; }
    }

public class User
    {
        public int Id { get; set; }
        public string UserName { get; set; }
        public List<GroupMembers> GroupMembers { get; set; }
    }

public class GroupMembers
    {
        public int Id { get; set; }
        public int UserId { get; set; }
        public User user { get; set; }

        public int GroupId { get; set; }
        public Group group { get; set; }
    }

數據上下文

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

        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<GroupMembers>()
                .HasKey(gm => new { gm.UserId, gm.GroupId });
            modelBuilder.Entity<GroupMembers>()
                .HasOne(gm => gm.group)
                .WithMany(group=> group.GroupMembers)
                .HasForeignKey(gm => gm.GroupId);
            modelBuilder.Entity<GroupMembers>()
                .HasOne(gm => gm.user)
                .WithMany(user => user.GroupMembers)
                .HasForeignKey(gm => gm.UserId);
        }
        public DbSet<User> usertable { get; set; }
        public DbSet<Group> grouptable { get; set; }
        public DbSet<GroupMembers> GroupMembers { get; set; }
    }

這樣在DataContext中創建多對多關系,可以在pagemodel中使用_context.(Relational tables)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM