在ASP.NET Core MVC中进行多对多关系的CRUD操作,可以按照以下步骤进行:
public class Student
{
public int StudentId { get; set; }
public string Name { get; set; }
public ICollection StudentCourses { get; set; }
}
public class Course
{
public int CourseId { get; set; }
public string Title { get; set; }
public ICollection StudentCourses { get; set; }
}
public class StudentCourse
{
public int StudentId { get; set; }
public Student Student { get; set; }
public int CourseId { get; set; }
public Course Course { get; set; }
}
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext(DbContextOptions options)
: base(options)
{
}
public DbSet Students { get; set; }
public DbSet Courses { get; set; }
public DbSet StudentCourses { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasKey(sc => new { sc.StudentId, sc.CourseId });
modelBuilder.Entity()
.HasOne(sc => sc.Student)
.WithMany(s => s.StudentCourses)
.HasForeignKey(sc => sc.StudentId);
modelBuilder.Entity()
.HasOne(sc => sc.Course)
.WithMany(c => c.StudentCourses)
.HasForeignKey(sc => sc.CourseId);
}
}
public class StudentController : Controller
{
private readonly ApplicationDbContext _context;
public StudentController(ApplicationDbContext context)
{
_context = context;
}
public IActionResult Index()
{
var students = _context.Students.Include(s => s.StudentCourses).ThenInclude(sc => sc.Course).ToList();
return View(students);
}
public IActionResult Create()
{
return View();
}
[HttpPost]
public IActionResult Create(Student student)
{
_context.Students.Add(student);
_context.SaveChanges();
return RedirectToAction("Index");
}
public IActionResult Edit(int id)
{
var student = _context.Students.Include(s => s.StudentCourses).ThenInclude(sc => sc.Course).FirstOrDefault(s => s.StudentId == id);
return View(student);
}
[HttpPost]
public IActionResult Edit(Student student)
{
_context.Students.Update(student);
_context.SaveChanges();
return RedirectToAction("Index");
}
public IActionResult Delete(int id)
{
var student = _context.Students.FirstOrDefault(s => s.StudentId == id);
_context.Students.Remove(student);
_context.SaveChanges();
return RedirectToAction("Index");
}
}
public class CourseController : Controller
{
private readonly ApplicationDbContext _context;
public CourseController(ApplicationDbContext context)
{
_context = context;
}
public IActionResult Index()
{
var courses = _context.Courses.Include(c => c.StudentCourses).ThenInclude(sc => sc.Student).ToList();
return View(courses);
}
public IActionResult Create()
{
return View();
}
[HttpPost]
public IActionResult Create(Course course)
{
_context.Courses.Add(course);
_context.SaveChanges();
return RedirectToAction("Index");
}
public IActionResult Edit(int id)
{
var course = _context.Courses.Include(c => c.StudentCourses).ThenInclude(sc => sc.Student).FirstOrDefault(c => c.CourseId == id);
return View(course);
}
[HttpPost]
public IActionResult Edit(Course course)
{
_context.Courses.Update(course);
_context.SaveChanges();
return RedirectToAction("Index");
}
public IActionResult Delete(int id)
{
var course = _context.Courses.FirstOrDefault(c => c.CourseId == id);
_context.Courses.Remove(course);
_context.SaveChanges();
return RedirectToAction("Index");
}
}
上一篇:Asp.Net Core MVC 电影应用程序 - 脚手架项目无法正常工作
下一篇:ASP.NET Core MVC Entity Framework Core: 上下文类型 'DatenbankKontext' 只声明了一个无参数的构造函数。