【问题标题】:Many to Many in database first approach mvc crud operation [closed]数据库中的多对多优先方法mvc crud操作[关闭]
【发布时间】:2014-05-28 02:13:14
【问题描述】:

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

表 1:- studentMaster 表2:- 科目

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

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

我知道如何使用 Entity Framework 使用数据库优先方法执行 CRUD 操作,但是当表具有多对多关系时如何执行 CRUD 操作。我也将我的问题放在 codeproject 上,但没有提供适当的帮助

【问题讨论】:

  • 哪个代码......实际上我不知道当数据库中的表之间存在many2many关系时如何执行crud操作
  • 一个多对多关系需要投影到两个多对一关系。 StudentMaster(StudentId) Subjects(SubjectId) StudentMaster_RELATIONSHIP_Subject(StudentId, SubjectId, POSSIBLE META DATA)
  • 你的问题不清楚。
  • 利亚姆,我的问题是当表有许多 2 多关系时如何在表中插入、删除、编辑、更新数据......我使用的是实体框架数据库第一种方法跨度>
  • 关注博客,了解使用 ADO.Net 的接口和存储库模式进行 MVC Crud 操作code2night.com/Blog/MyBlog/…

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


【解决方案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>

【讨论】:

  • 我不知道如何使用这个代码你有什么例子
  • 虽然我给了你一个例子;) 处理多对多关系与所有其他 crud 操作没有什么不同。您想要哪些操作的示例代码?
  • 我想通过课程查看学生的代码
  • 这是显示学生详细信息的代码,我应该添加哪些模型类来查看。如果我只添加学生课程,则不显示科目,我希望学生有他们的科目 public ActionResult Index() { return View(db.StudentMasters .Include(x => x.Subjects )); }
  • 啊,明白你的意思了。我会发布一个例子
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-07
  • 2015-11-14
  • 1970-01-01
相关资源
最近更新 更多