EF的savechange时遇到问题

  今天我们来聊一聊一个简单的问题,在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!




评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值