今天我们来聊一聊一个简单的问题,在ITOO5.0开发过程中,我们需要用到批量插入功能。我们利用的是EF的savechange方法,这个方法是我们底层封装好的方法,只需要调用即可。
应用的场景是考评系统在计算成绩之后要将计算完成的分数插入到对应的表中。刚开始一条数据的时候没有问题,一旦数据量上升至两条及两条以上,那么数据库中始终显示的是最后插入的一条,那么问题来了~
应用的场景是考评系统在计算成绩之后要将计算完成的分数插入到对应的表中。刚开始一条数据的时候没有问题,一旦数据量上升至两条及两条以上,那么数据库中始终显示的是最后插入的一条,那么问题来了~
有问题的代码中我们实现的代码是这样的:
<pre name="code" class="csharp">try
{
t_scores enscores = new t_scores();
for (int i = 0; i < newDataTable.Rows.Count; i++)
{
enscores.StudentNo = newDataTable.Rows[i]["StudentID"].ToString();
enscores.AllScore = float.Parse(newDataTable.Rows[i]["Score"].ToString());
enscores.ExamID = "20141227100841";
CurrentDal.Add(enscores);
}
return DbSession.SaveChanges() >= 0;
}
catch (Exception dbEx)
{
throw dbEx;
}
刚开始一直怀疑是插入语句的问题,因为这是我们第一次用mysql数据库,找了很多解决此类问题的方法,都没有解决这个问题。
后来仔细阅读了一下代码,发现是代码写的有问题,大家可以看一看下面的正确代码:<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"></span><pre name="code" class="csharp">try
{
for (int i = 0; i < newDataTable.Rows.Count; i++)
{
t_scores enscores = new t_scores();
enscores.StudentNo = newDataTable.Rows[i]["StudentID"].ToString();
enscores.AllScore = float.Parse(newDataTable.Rows[i]["Score"].ToString());
enscores.ExamID = "20141227100841";
CurrentDal.Add(enscores);
}
return DbSession.SaveChanges() >= 0;
}
catch (Exception dbEx)
{
throw dbEx;
}
抛开问题不说,这反映出我们编写代码的时候将实现放在了第一位,而忽略了逻辑,只是一个小细节,就能出现意想不到的错误,最好解决的问题是编译时出现的问题,中等层次的问题是编译通过但是运行时无法进行的问题,最最困难的问题是编译和运行都没有问题,但是运行之后无法达到我们期望的效果。
希望大家能够引以为戒,enjoy coding!