【发布时间】:2015-11-14 00:38:36
【问题描述】:
有人可以先说明 EF 数据库中有多少关系有效吗?
例如Student 和Course 表,其中的关系是多对多的。我已经有一个数据库。
所以我创建了一个.edmx
Student 和 Courses 的类是自动创建的。我在StudentCourseViewModel.cs 中添加了一个新类。想法是控制与它的关系。
我的StudentCourseViewModel 包含以下内容:
public class StudentCourseViewModel
{
public Student Student{ get; set; }
public IEnumerable<SelectListItem> AllCourses{ get; set; }
private List<int> _selectedCourse;
public List<int> SelectedCourse
{
get
{
if (_selectedCourse == null)
{
_selectedCourse = Student.Courses.Select(m => m.pkID).ToList();
}
return _selectedCourse;
}
set { _selectedCourse = value; }
}
public ActionResult Create()
{
ViewBag.Courses = new SelectList(db.Courses, "pkID", "Name");
return View();
}
public ActionResult Create(StudentCourseViewModel model,[Bind(Include = "pkID,Name")] Student student)
{
if (ModelState.IsValid)
{
if (student == null)
return HttpNotFound();
// Remove items that were unselected
db.Courses.Where(m => !model.SelectedCourses
.Contains(m.pkID))
.ToList()
.ForEach(m => student.Courses.Remove(m));
// Add newly selected items
var existingClientIds = student.Courses.Select(m => m.pkID).ToList();
db.Courses.Where(m => model.SelectedCourses.Except(existingClientIds)
.Contains(m.pkID))
.ToList()
.ForEach(m => student.Courses.Add(m));
db.students.Add(student);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(student);
}
我现在想知道如何处理 // GET: /Create 和 // POST: /Create
以及如何查看create.cshtml 中的课程列表?
上面的代码出现以下错误:
EntityFramework.dll 中出现“System.Data.Entity.Infrastructure.DbUpdateException”类型的异常,但未在用户代码中处理
附加信息:更新条目时出错。有关详细信息,请参阅内部异常。
【问题讨论】:
-
关系在数据库中是如何映射的,有没有中间
StudentCourse映射表?目前尚不清楚您的“ViewModel”如何以任何方式映射关系。 -
嘿,我在数据库中有一个中间 StudentCourse 表,但是当我创建 .edmx 时,StudentCourse 表未显示在模型中,它是一个链接,其中包含“多对多” *" 符号。
-
听起来它已经正确映射了,你没有为你的中间表生成一个类,只是填充了相关的导航属性。您的控制器/视图中有什么问题?
-
我在创建新学生时用其他词更新学生时遇到问题。我已将以下内容添加到 Get /create function ViewBag.Courses= new SelectList(db.Courses, "pkID", "Name");它的工作原理我在创建视图中有一个列表,我可以选择,这里是如何修改 Post/Create 函数以正确保存它的问题?
标签: c# asp.net-mvc entity-framework