ASP.NETMVC中使用存储库模式实现多对多关系。
创始人
2024-09-19 09:30:49
0
  1. 创建实体类

public class Student { public int Id { get; set; } public string Name { get; set; } public virtual ICollection Courses { get; set; } }

public class Course { public int Id { get; set; } public string Name { get; set; } public virtual ICollection Students { get; set; } }

  1. 创建DbContext

public class ApplicationDbContext : DbContext { public DbSet Students { get; set; } public DbSet Courses { get; set; }

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity()
        .HasMany(s => s.Courses)
        .WithMany(c => c.Students)
        .Map(cs =>
        {
            cs.MapLeftKey("StudentId");
            cs.MapRightKey("CourseId");
            cs.ToTable("StudentCourses");
        });
}

}

  1. 创建存储库

public class CourseRepository : IDisposable { private ApplicationDbContext context = new ApplicationDbContext();

public void AddCoursesToStudent(Student student, List courses)
{
    student.Courses = courses;
    context.SaveChanges();
}

public List GetCoursesForStudent(int studentId)
{
    return context.Students
        .Where(s => s.Id == studentId)
        .SelectMany(s => s.Courses)
        .ToList();
}

public void Dispose()
{
    context.Dispose();
}

}

  1. 控制器和视图

public class HomeController : Controller { private CourseRepository courseRepository = new CourseRepository();

public ActionResult Index()
{
    ViewBag.Courses = courseRepository.GetCoursesForStudent(1);
    return View();
}

[HttpPost]
public ActionResult SaveCourses()
{
    int studentId = int.Parse(Request.Form["studentId"]);
    List courses = Request.Form["courses"]
        .Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
        .Select(courseId => new Course { Id = int.Parse(courseId) })
        .ToList();

    courseRepository.AddCoursesToStudent(studentId, courses);
    return RedirectToAction("Index");
}

}

@model ProjectName.Models.Student

@{ ViewBag.Title = "Index";

相关内容

热门资讯

五分钟了解!悠闲麻将能提高胜率... 五分钟了解!悠闲麻将能提高胜率(辅助挂)真是真的有挂(专业辅助实用技巧)-哔哩哔哩;1.悠闲麻将能提...
一分钟了解!堆金城双金麻将有挂... 一分钟了解!堆金城双金麻将有挂(辅助挂)原先是有挂(专业辅助力荐教程)-哔哩哔哩;1.堆金城双金麻将...
7分钟了解!湖北微乐麻将小程序... 7分钟了解!湖北微乐麻将小程序辅牌器(辅助挂)竟然存在有挂(专业辅助2025新版教程)-哔哩哔哩是一...
第3分钟了解!指尖四川麻将有挂... 第3分钟了解!指尖四川麻将有挂的(辅助挂)固有真的有挂(专业辅助AA德州教程)-哔哩哔哩;指尖四川麻...
五分钟了解!天天赢棋牌外挂(辅... 五分钟了解!天天赢棋牌外挂(辅助挂)原生真的有挂(专业辅助切实教程)-哔哩哔哩;五分钟了解!天天赢棋...
2分钟了解!掌电竞技外挂(辅助... 《2分钟了解!掌电竞技外挂(辅助挂)从来真的是有挂(专业辅助AI教程)-哔哩哔哩》 掌电竞技外挂软件...
第3分钟了解!开心武汉花可以调... 【福星临门,好运相随】;第3分钟了解!开心武汉花可以调胜率(辅助挂)原来真的有挂(专业辅助解密教程)...
第5分钟了解!麻将朋友局有挂(... 第5分钟了解!麻将朋友局有挂(辅助挂)原生真的是有挂(专业辅助安装教程)-哔哩哔哩;1、不需要AI权...
第3分钟了解!17麻将众娱大菠... 第3分钟了解!17麻将众娱大菠萝提高胜率的方法(辅助挂)好像是有挂(专业辅助扑克教程)-哔哩哔哩;1...
第3分钟了解!蜂娱棋牌惠东麻将... 第3分钟了解!蜂娱棋牌惠东麻将规律(辅助挂)原本真的是有挂(专业辅助揭秘教程)-哔哩哔哩;蜂娱棋牌惠...