数据库中的多对多首先接近mvc crud操作

时间:2014-04-14 07:45:42

标签: .net asp.net-mvc entity-framework asp.net-mvc-4 ef-database-first

如何在mvc数据库第一种方法中使用多对多关系。我在sql中有以下表结构

表1: - studentMaster 表2: - 主题

我的Model1.edmx和sql表结构pic在这里

http://geeksprogrammings.blogspot.com/2014/04/blog-post.html

我知道如何使用实体框架使用DAtabase First方法执行CRUD操作,但是当表有多对多关系时如何执行crud操作。我还在codeproject上提出了我的问题,但没有给出适当的帮助

1 个答案:

答案 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>