要实现ASP.Net Core的多对多CRUD操作,需要以下步骤:
public class Student
{
public int StudentId { get; set; }
public string Name { get; set; }
// other properties
public ICollection StudentCourses { get; set; }
}
public class Course
{
public int CourseId { get; set; }
public string Name { get; set; }
// other properties
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 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 : ControllerBase
{
private readonly ApplicationDbContext _context;
public StudentController(ApplicationDbContext context)
{
_context = context;
}
// GET: api/students
[HttpGet]
public async Task>> GetStudents()
{
return await _context.Students.ToListAsync();
}
// POST: api/students
[HttpPost]
public async Task> CreateStudent(Student student)
{
_context.Students.Add(student);
await _context.SaveChangesAsync();
return CreatedAtAction(nameof(GetStudent), new { id = student.StudentId }, student);
}
// GET: api/students/{id}
[HttpGet("{id}")]
public async Task> GetStudent(int id)
{
var student = await _context.Students.FindAsync(id);
if (student == null)
{
return NotFound();
}
return student;
}
// PUT: api/students/{id}
[HttpPut("{id}")]
public async Task UpdateStudent(int id, Student student)
{
if (id != student.StudentId)
{
return BadRequest();
}
_context.Entry(student).State = EntityState.Modified;
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!StudentExists(id))
{
return NotFound();
}
else
{
throw;
}
}
return NoContent();
}
// DELETE: api/students/{id}
[HttpDelete("{id}")]
public async Task DeleteStudent(int id)
{
var student = await _context.Students.FindAsync(id);
if (student == null)
{
return NotFound();
}
_context.Students.Remove(student);
await _context.SaveChangesAsync();
return NoContent();
}
private bool StudentExists(int id)
{
return _context.Students.Any(e => e.StudentId == id);
}
}
这是一个简单的示例,演示了如何使用ASP.Net Core进行多对多关系的CRUD操作。你可以根据自己的需求对代码进行扩展和修改。
上一篇:Asp.Net Core的DropDownListFor - 获取多个模型属性
下一篇:ASP.NET Core的多个作用域的ClaimsAuthorizationRequirement是否按预期工作?