如何在mvc数据库优先方法中使用多对多关系。我在sql中有以下表格结构
表1:studentMaster表2:-受试者
我的Model1.edmx和sql表结构图片在这里
http://geeksprogrammings.blogspot.com/2014/04/blog-post.html
我知道如何使用DAtabase First方法使用实体框架执行CRUD操作,但知道如何在表具有多对多关系时执行CRUD操作。我也提出了关于代码项目的问题,但没有给适当的帮助
如果不使用任何类型的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);
}
若要以其他方式添加多个连接,请对其他对象执行相同操作。
处理连接时返回要查看的内容
由于剃刀并不总是乐于获得包含连接实体的实体,因此您可能应该为视图创建一个新模型,而不是使用实体代理。
控制器
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);
ViewModel
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>