添加多个项目时为什么只将最后一项插入数据库?

时间:2015-11-27 12:22:17

标签: c# linq

我正在尝试将多个子记录添加到数据库中,但只有最后一项插入到数据库中。

模型

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
}

3 个答案:

答案 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);
   }
}