MVC 使用DbContext派生类操作sql server2012的增删查改报错

SaveEmployee方法报错及解决办法
博客讲述ViewModel层SaveEmployee方法执行Action报错问题。执行时提示EmployeeId为空,让数据库表数据类型可为空仍失败,创建Employee对象也报错。最终在数据库设置主键并设为自增长后运行成功,原因是其可标识表和行。

Control中Action:

  public ActionResult SaveEmployee(Employee e,string BtnSubmit)
        {
            switch (BtnSubmit)
            {
                case "Save Employee":
                    {
                        EmployeeBusinessLayer empBal = new EmployeeBusinessLayer();
                        e.EmployeeId = 10;
                        empBal.SaveEmployee(e);
                        return RedirectToAction("Index");
                    }
                case "Cancel":
                    {
                        return RedirectToAction("Index");
                    }
            }
            return  new EmptyResult();
        }

ViewModel层SaveEmployee(Employee e)

    public Employee SaveEmployee(Employee e)
        {
            SalesERPDAL salesDal = new SalesERPDAL();
            salesDal.employees.Add(e);
            salesDal.SaveChanges();
            return e;
        }

其中SalesERPDAL时继承自DbContext的派生类,employees时Dbset的一个对象。Emoloyee是数据模型,执行Action时报错。提示EmployeeId(数据库中的一列)为空,运行失败。测试让数据库中的表的数据类型可为空。执行失败。最后,在SaveEmployee(Employee e)中创建Employee对象,还是报错,提示:System.Data.Entity.Infrastructure.DbUpdateConcurrencyException: Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded. Refresh ObjectStateManager entries。

最后在数据库中设置一个主键,并将主键设置为自增长。运行成功。

原因分析:

            设置主键和自增长是为了标识具体的某张表和表中的某一行。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值