[英]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.