EF中的DBFirst实例(下)

上一篇博文新建了一个项目以及数据模型文件,本次就接着上次的讲解继续往下深入,学习一下如何使用Linq进行一个基本的增删改查。

一、新建Web页面

新建一个Web页面Action.aspx,在该页面中添加一些文本框以及按钮,具体操作步骤不再讲述,效果如下所示:


                                              

二、添加后台操作

1.查询
(1)后台代码

        protected void btnSelect_Click(object sender, EventArgs e)   //查询
        {
            string information = "";
            var result = from c in dbcontext.Student1 select c;//简单的无where的查询
            foreach (var item in result)
            information = "姓名:" + item.Sname + "\n" + "学号:" + item.Sno + "\n" + "性别:" + item.Ssex + "\n";
            Label1.Text = information;
           // var result1 = from c in dbcontext.Student1 where c.Sno = "110" select c;
           // var result1 = from c in dbcontext.Student1 where c.Sno = TextBox1.Text select c;
        }

(2)查询所有记录效果图

                   EF中的DBFirst实例(下)_第1张图片                                EF中的DBFirst实例(下)_第2张图片

(3)LINQPad工具效果查看


EF中的DBFirst实例(下)_第3张图片                                                     


                                                              

使用LINQPad工具可以查看Linq查询语言对应的具体的数据库SQL脚本语言以及Lamada表达式(LINQPad工具对于学习Linq语言非常好用,具体使用方式可以查看我的另一篇博文)。

2.添加
(1)后台代码

 protected void btnAdd_Click(object sender, EventArgs e)    //添加
        {
            Student1 str = new Student1();   //新建实例
            str.Sno = Txtno.Text;            //为该实例的各个属性赋值
            str.Sname = Txtname.Text;
            str.Ssex = Convert.ToInt16(Txtsex.Text);
            str.Sphone = Txtphone.Text;
            str.Saddress = Txtaddress.Text;
            dbcontext.Student1.AddObject(str); //添加到对象上下文中
            dbcontext.SaveChanges();           //保存修改
            //dbcontext.Student1.Attach(str);
            //dbcontext.ObjectStateManager.ChangeObjectState(str,EntityState.Added);
            //dbcontext.SaveChanges();
        }

(2)效果图

      EF中的DBFirst实例(下)_第4张图片                  EF中的DBFirst实例(下)_第5张图片

3.修改
(1)后台代码

 protected void btnUpdate_Click(object sender, EventArgs e)  //修改方法1
        {
            Student1 str = new Student1();//首先创建一个实体类
            str.Sno = Txtno.Text;
            str.Sname = Txtname.Text;
            str.Ssex = Convert.ToInt16(Txtsex.Text);
            str.Sphone = Txtphone.Text;
            str.Saddress = Txtaddress.Text;
            <span style="color:#ff0000;">dbcontext.Student1.Attach(str); //将该实体类附加到对象上下文中</span>
            dbcontext.ObjectStateManager.ChangeObjectState(str, EntityState.Modified);//修改对应实体的的状态
            dbcontext.SaveChanges(); //保存修改
<span style="font-family: Arial, Helvetica, sans-serif;">  }</span>
<span style="font-family: Arial, Helvetica, sans-serif;">
</span>
<span style="font-family: Arial, Helvetica, sans-serif;"></span><pre name="code" class="html"> protected void btnUpdate_Click(object sender, EventArgs e)  //修改方法2
        {
            Student1 str = new Student1();//首先创建一个实体类
            str = (from c in dbcontext.Student1 where c.Sno == Txtno.Text select c).SingleOrDefault<Student1>();
            str.Sno = Txtno.Text;
            str.Sname = Txtname.Text;
            str.Ssex = Convert.ToInt16(Txtsex.Text);
            str.Sphone = Txtphone.Text;
            str.Saddress = Txtaddress.Text;
           <span style="color:#ff0000;"> //dbcontext.Student1.Attach(str); //将该实体类附加到对象上下文中</span>
            dbcontext.ObjectStateManager.ChangeObjectState(str, EntityState.Modified);//修改对应实体的的状态
            dbcontext.SaveChanges(); //保存修改
        }


 
 

(2)效果图

                                  EF中的DBFirst实例(下)_第6张图片                           EF中的DBFirst实例(下)_第7张图片
4.删除
(1)后台代码

 protected void btnDelete_Click(object sender, EventArgs e)  //删除
        {
            //var result=from c in dbcontext.Student1 ;
            Student1 st1 = new Student1();//首先创建一个实体类
            st1.Sno = Txtno.Text;
            <span style="color:#ff0000;">dbcontext.Student1.Attach(st1); //将该实体类附加到对象上下文中</span>
            dbcontext.ObjectStateManager.ChangeObjectState(st1, EntityState.Deleted);//修改对应实体的的状态
            dbcontext.SaveChanges(); //保存修改
        }

        protected void btnDelete_Click(object sender, EventArgs e)  //删除
        {
            Student1 st1 = (from c in dbcontext.Student1 where c.Sno == Txtno.Text select c).SingleOrDefault<Student1>();
            dbcontext.ObjectStateManager.ChangeObjectState(st1, EntityState.Deleted);//修改对应实体的的状态
            dbcontext.SaveChanges();
        }


(2)效果图


三、总结

1.本次使用Linq(集成语言查询)进行了基本的数据增删改查,Linq查询语言与Sql不同,具体两者之间的转换可以借助于LINQPad工具实现。
2.使用Linq进行数据的增删改大致可分为以下几个步骤:
(1)新建一个实体类对象
(2)设置该对象的各个属性
(3)把该对象添加到对象上下文中
(4)修改上下文状态
(5)保存修改
3.修改、删除时两种操作方法
(1)新建一个实体类对象
(2)从数据查询得到一个对象(此时不再需要把该对象附加到对象上下文中,因为它已经存在了)
4.修改、删除时两种操作方法性能分析
初学EF以及Linq,这方面还不太了解,以后再完善

四、易犯错误

(1)忘记写SaveChanges();导致执行失败。SaveChanges()的作用就是生成并执行数据库脚本,最终实现数据的操作成功。
(2)选用第二种方式实现修改、删除操作时,再次把对象添加到对象上下文中

Linq语句不容易编写,想要编写正确的Linq语句可以借助LINQPad工具


源代码:EFDBFirst设计实例


你可能感兴趣的:(EF中的DBFirst实例)