我正在尝试将多个子记录添加到数据库中,但只有最后一项插入到数据库中。
模型
public string[] CourseID { get; set; }
public SelectList CourseList { get; set; }
控制器
StudentWalkInn _studentWalkInn = new StudentWalkInn();
....
....
//CourseId is of type string[]
if (mdlWalkInn.CourseID.Length > 0)
{
StudentWalkInnCourse _studentCourse = new StudentWalkInnCourse();
foreach (var courseId in mdlWalkInn.CourseID)
{
_studentCourse.CourseID=Convert.ToInt32(courseId);
_studentWalkInn.StudentWalkInnCourses.Add(_studentCourse);
}
}
_db.StudentWalkInns.Add(_studentWalkInn);
int i = _db.SaveChanges();
if (i > 0)
{
//success message
}
答案 0 :(得分:3)
仅添加最后一项的原因是您不断添加相同的实例。当您更改循环中的ID时,LINQ2SQL会将其解释为ID的更改,而不是添加新项目。
在循环的每次迭代中添加不同的实例应该可以解决这个问题:
foreach (var courseId in mdlWalkInn.CourseID)
{
var _studentCourse = new StudentWalkInnCourse {
CourseID = Convert.ToInt32(courseId)
};
_studentWalkInn.StudentWalkInnCourses.Add(_studentCourse);
}
答案 1 :(得分:2)
您正在使用相同的StudentWalkInnCourse
对象。即使您多次添加,EF也会检测到它是同一个对象,并且不会添加新实体。
在循环内移动以下行。
StudentWalkInnCourse _studentCourse = new StudentWalkInnCourse();
以下是循环的样子:
foreach (var courseId in mdlWalkInn.CourseID)
{
StudentWalkInnCourse _studentCourse = new StudentWalkInnCourse();
_studentCourse.CourseID=Convert.ToInt32(courseId);
_studentWalkInn.StudentWalkInnCourses.Add(_studentCourse);
}
答案 2 :(得分:1)
您需要在循环中创建新实例,因为只设置新ID不起作用。
if (mdlWalkInn.CourseID.Length > 0)
{
foreach (var courseId in mdlWalkInn.CourseID)
{
StudentWalkInnCourse _studentCourse = new StudentWalkInnCourse();
_studentCourse.CourseID=Convert.ToInt32(courseId);
_studentWalkInn.StudentWalkInnCourses.Add(_studentCourse);
}
}