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