如何在mvc数据库第一种方法中使用多对多关系。我在sql中有以下表结构
表1: - studentMaster 表2: - 主题
我的Model1.edmx和sql表结构pic在这里
http://geeksprogrammings.blogspot.com/2014/04/blog-post.html
我知道如何使用实体框架使用DAtabase First方法执行CRUD操作,但是当表有多对多关系时如何执行crud操作。我还在codeproject上提出了我的问题,但没有给出适当的帮助
答案 0 :(得分:1)
如果不使用任何类型的IRepository模式:
创建强>
为新学生添加科目
using(var dbContext = new Model1Entitites()){
var student = new Student{details..};
student.Add(new Subject{});
dbContext.Students.Add(student);
dbContext.SaveChanges();
}
<强>更新强> 将主题添加到现有学生
using(var dbContext = new Model1Entities()){
objectToAddTo = dbContext.studentMaster.SingleOrDefault(x=> x.id == id);
objectToAddTo.Subjects.Add(new Subject{});
dbContext.SaveChanges();
}
将现有科目添加到现有学生
var student = db.Students.FirstOrDefault(x=> x.Id == id);
var subjectToAdd = db.Subjects.FirstOrDefault(x=> x.id == SubjectId);
if(student!= null){
if(subjectToAdd != null){
student.Subjects.Add(subjectToAdd);
}
}
db.SaveChanges();
从学生中移除主题
using(var dbContext = new Model1Entities()){
objectToRemoveFrom = dbContext.studentMaster.SingleOrDefault(x=> x.id == id);
var subjectToRemove = dbContext.Subjects.SingleOrDefault(x=> x.subjectid==subjectid);
objectToRemoveFrom.Subjects.Remove(subject);
dbContext.SaveChanges();
}
选择强>
using(var dbContext = new Model1Entities()){
return dbContext.Students.Include(x=> x.Subjects);
}
如果要反过来添加多个连接,请对另一个对象执行相同操作。
在处理连接时返回要查看的内容
由于razor并不总是满意于获取包含连接权限的实体,因此您应该为视图创建一个新模型,而不是使用实体代理。
<强>控制器强>
var model = new StudentModel();
var student = db.Students.Include(x=> x.Subjects);
//here you can use example AutoMapper, or you can do it manually
model.Id = student.id;
model.Name = student.Name;
model.Subjects = db.Students.Subjects.Select(x=> new SubjectModel{Id = x.Id, Name = x.Name}).ToList();
return View(model);
<强>视图模型强>
public class StudentModel{
public int Id{get;set;}
public string Name{get;set;}
public List<SubjectModel> Subjects{get;set;}
}
public class SubjectModel{
public int Id{get;set;}
public string Name{get;set;}
}
<强>剃刀强>
@model StudentModel;
<span>Student name @Model.Name</span>
<ul>
@foreach(var subject in Model.Subjects){
<li id="@subject.Id">@subject.Name</li>
}
<ul>