Asp.net mvc 在ASP.NET MVC中使用实体框架创建和删除相关数据
我对这一切都很陌生。我目前正在阅读ASP.NET网站上的教程“使用MVC开始EF”(第6章) 在本教程中,在标题为“将课程作业添加到讲师编辑页面”的部分,作者写道如何在讲师页面编辑课程:Asp.net mvc 在ASP.NET MVC中使用实体框架创建和删除相关数据,asp.net-mvc,entity-framework,many-to-many,Asp.net Mvc,Entity Framework,Many To Many,我对这一切都很陌生。我目前正在阅读ASP.NET网站上的教程“使用MVC开始EF”(第6章) 在本教程中,在标题为“将课程作业添加到讲师编辑页面”的部分,作者写道如何在讲师页面编辑课程: public ActionResult Edit(int id) { Instructor instructor = db.Instructors .Include(i => i.OfficeAssignment) .Inc
public ActionResult Edit(int id)
{
Instructor instructor = db.Instructors
.Include(i => i.OfficeAssignment)
.Include(i => i.Courses)
.Where(i => i.InstructorID == id)
.Single();
PopulateAssignedCourseData(instructor);
return View(instructor);
}
public ActionResult Edit(int id, FormCollection formCollection, string[] selectedCourses)
{
var instructorToUpdate = db.Instructors
.Include(i => i.OfficeAssignment)
.Include(i => i.Courses)
.Where(i => i.InstructorID == id)
.Single();
if (TryUpdateModel(instructorToUpdate, "", null, new string[] { "Courses" }))
{
try
{
if (String.IsNullOrWhiteSpace(instructorToUpdate.OfficeAssignment.Location))
{
instructorToUpdate.OfficeAssignment = null;
}
UpdateInstructorCourses(selectedCourses, instructorToUpdate);
db.Entry(instructorToUpdate).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
catch (DataException)
{
//Log the error (add a variable name after DataException)
ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists, see your system administrator.");
}
}
PopulateAssignedCourseData(instructorToUpdate);
return View(instructorToUpdate);
}
有人能告诉我如何使用与作者相同的概念来完成删除和创建动作方法吗?或者,如果你能告诉我一个有用的教程/网站,关于MVC中与EF的多对多关系,特别是关于如何为多对多相关数据创建控制器和视图,类似于上面提到的教程。我是这方面的初学者,但我仍然需要完成工作,所以如果使用的概念一致,这将非常有帮助,对我来说会更容易
非常感谢 创建和删除通常比较简单。我只概述了基本结构。“创建条目”页面的控制器是:
public ViewResult CreateInstructor()
{
return View();
}
要生成创建表单,您可以使用脚手架(只需右键单击视图并选择添加视图…然后选择适当的模型和页面类型)。
此页面的回发由具有[HttpPost]属性的控制器处理,它将表单上的数据绑定到传递到控制器方法的对象,然后传递到DBContext Add()方法,最后执行SaveChanges()方法以实际命中数据库:
[HttpPost]
public ActionResult CreateInstructor(Instructor instructor)
{
db.Instructors.Add(instructor);
db.Instructors.SaveChanges();
return View(); //There will be some other logic here typically such as redirecting on a successful creation or showing specific validation issues with the object .
}
Delete是使用DBContext-Remove方法实现的,只需注意,不必先点击数据库加载对象,然后再删除它。通常会向您传递对象的id,然后您可以将对象的新实例附加到上下文并将其删除
public ActionResult DeleteInstructor(int instructorId)
{
var instructor = new Instructor {Id = instructorId};
db.Instructors.Attach(instructor);
db.Instructors.Remove(instructor);
db.Instructors.SaveChanges();
return View();
}
我知道这是一根旧线。但我正试图做同样的事情 这是我的解决办法
//
//获取:/Project/Create/
公共操作结果创建()
{
var project=新项目();
ViewBag.Themes=db.Themes.ToList();
返回视图(项目);
}
//
//POST:/Project/Create/
[HttpPost]
创建公共操作结果(项目项目,字符串[]选择主题)
{
var errors=ModelState.Select(x=>x.Value.errors).ToList();
project.Themes=新列表();
if(TryUpdateModel(project,”,null,新字符串[]{“Theme”}))
{
尝试
{
更新项目主题(选定主题,项目);
db.Project.Add(项目);
db.SaveChanges();
返回操作(“索引”);
}
捕获(数据异常)
{
//记录错误(在DataException之后添加变量名)
AddModelError(“,“无法创建项目”);
}
}
返回视图(项目);
}
在“创建”视图中:
@{
列表主题=ViewBag.themes;
@:
foreach(在主题中显示变量)
{
@显示名称
如果(display.Name.Length>20)
{
@:
}
其他的
{
如果(display.ThemeID%2==0)
{
@:
}
}
}
@:
@:
}
希望你觉得它有用,你也可以看看我的SO帖子
我不认为这正是OP想要的。像讲师一样删除条目很简单。我想他是在问如何删除,例如,讲师和课程之间的关系。比如,如果你想从课程中删除一名讲师。