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

标签 c# linq

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

型号

public string[] CourseID { get; set; }
public SelectList CourseList { get; set; }

Controller

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
}

最佳答案

之所以只添加了最后一项,是因为你一直在添加同一个实例。当您在循环中更改 ID 时,LINQ2SQL 会将其解释为更改 ID,而不是添加新项。

在循环的每次迭代中添加不同的实例应该可以解决这个问题:

foreach (var courseId in mdlWalkInn.CourseID)
{
    var _studentCourse = new StudentWalkInnCourse {
        CourseID = Convert.ToInt32(courseId)
    };
    _studentWalkInn.StudentWalkInnCourses.Add(_studentCourse);
}

关于c# - 为什么在添加多个项目时只将最后一个项目插入数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33957345/

相关文章:

c# - 当缺少所有表达式时,C# for 循环会做什么。例如 (;;) {}

c# - LINQ 删除结果

c# - 来自 Eric Lippert 的博客 : "don' t close over the loop variable"

asp.net - 检索 HttpWebResponse 并将其放入 XDocument 的有效方法

c# - 在不同的进程中运行委托(delegate)

c# 我的析构函数没有被调用?

c# - 类接口(interface)应该放在 .NET 类库中的什么位置?

c# - 延迟实例化的传递参数

C#/Linq 获取相邻的集合

c# - 单元测试错误 : This function can only be invoked from LINQ to Entities