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、打开软件启动之后找到中间准星...
五分钟解迷!赣湘互娱辅助,全民... 五分钟解迷!赣湘互娱辅助,全民比鸡bug(真是是真的挂)-哔哩哔哩一、赣湘互娱辅助AI软件牌型概率发...
8分钟分享!潮友会app下载安... 8分钟分享!潮友会app下载安卓,途游辅助官网(切实是有挂)-哔哩哔哩1、许多玩家不知道潮友会app...
8分钟必备!人海大厅辅助插件,... 8分钟必备!人海大厅辅助插件,天天卡五星攻略(一直真的有挂)-哔哩哔哩1、每一步都需要思考,不同水平...
第四分钟解迷!拱趴大菠萝辅助工... 第四分钟解迷!拱趴大菠萝辅助工具下载,卡农血拼辅助(竟然真的是有挂)-哔哩哔哩1、打开软件启动之后找...
七分钟必备!兴动互娱游戏辅助器... 七分钟必备!兴动互娱游戏辅助器好用吗,水鱼辅助软件下载(其实是有挂)-哔哩哔哩亲,关键说明,兴动互娱...
1分钟揭露!微信小程序万能修改... 1分钟揭露!微信小程序万能修改器,川娱竞技辅助(总是真的是有挂)-哔哩哔哩1)微信小程序万能修改器辅...
一分钟详细!0759湛江吴川三... 一分钟详细!0759湛江吴川三脚鸡辅助,水鱼天下破解版微信(真是真的有挂)-哔哩哔哩1、实时0759...
四分钟科普!新上游拼十辅助,科... 四分钟科普!新上游拼十辅助,科技新星游牛牛辅助(都是真的有挂)-哔哩哔哩1、该软件可以轻松地帮助玩家...
第三分钟揭露!传送屋激k万能辅... 第三分钟揭露!传送屋激k万能辅助器app,四川熊猫辅助软件视频(好像是有挂)-哔哩哔哩1、任何传送屋...