Entity Framework 6 +WinForm (第二首) 使用Entity Framework 进行CRUD操作 【持续优化整治中】Entity Framework 6 +WinForm (第二篇) 使用Entity Framework 进行CRUD操作 【持续优化整治中】

以首先篇之基本功及,本文主要教授基于EntityFramework 及SqlServer2012
实现基本的CRUD功能。

以率先首的功底及,本文主要讲解基于EntityFramework 及SqlServer2012
实现核心的CRUD功能。

平等、设计录入界面

开创一个录入Form,用来管理UserAccount数据。

1.于列文件及右键,选择Add->New Item..

大红鹰葡京会 1

2.取舍Windows 窗体 模板,将名字改成也UserFrm.cs,点“Add”。

3.添加如下输入框

大红鹰葡京会 2

一律、设计录入界面

创办一个录入Form,用来管理UserAccount数据。

1.于项目文件上右键,选择Add->New Item..

大红鹰葡京会 3

2.摘取Windows 窗体 模板,将名字改成呢UserFrm.cs,点“Add”。

3.添加如下输入框

大红鹰葡京会 4

次、保存操作

/// <summary>
        /// 新增数据
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Btn_Save_Click(object sender, EventArgs e)
        {
            using (OrderDBContainer db = new OrderDBContainer())
            {
                UserAccout userAccout = new UserAccout();
                userAccout.FirstName = this.FirstNameTxt.Text;
                userAccout.LastName = this.LastNameTxt.Text;
                userAccout.AuditFileds.UpdateDate = DateTime.Now;
                userAccout.AuditFileds.InsertDate = DateTime.Now;
                db.UserAccoutSet.Add(userAccout); 
                db.SaveChanges();
                MessageBox.Show("保存成功!");
            }
        }

 

仲、保存操作

/// <summary>
        /// 新增数据
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Btn_Save_Click(object sender, EventArgs e)
        {
            using (OrderDBContainer db = new OrderDBContainer())
            {
                UserAccout userAccout = new UserAccout();
                userAccout.FirstName = this.FirstNameTxt.Text;
                userAccout.LastName = this.LastNameTxt.Text;
                userAccout.AuditFileds.UpdateDate = DateTime.Now;
                userAccout.AuditFileds.InsertDate = DateTime.Now;
                db.UserAccoutSet.Add(userAccout); 
                db.SaveChanges();
                MessageBox.Show("保存成功!");
            }
        }

 

二、更新数据**

EF的换代自己了解的艺术发出如下三种(可能还起另外的方式)

【代码如下】

措施同样、只有FirstName的值会修改,很显要字段比较多,每个字段都遍历赋值是否修改,显示不是十分有益于,故未建议利用,如果是运框架模板另外说吧。

艺术二、只有InsertDate
的价未会见为修改,其他的字段都见面于改动,如果字段比较多,表面上看起来较便于(只要设置不要改动的排就推行了),测试过程遭到为发觉弊端,如果实体中来不行吗空字段,且不再排除不保留的排列的克外,则会促成保存失败(如下图)。

大红鹰葡京会 5

计三,按自手上的知水平,感觉是不过负谱的,从数据库拿到数码后如将要改之值赋下就是足以了(从高并发、高性能方向为起弊端,因为添了数据库的开,需要先要交数映射到实体对象,在改实体的属性值,还要再保存至数据库,明显多矣一致赖数据库交互,而且若实体对象比较坏,对网的支付自然会加).

仁者见仁智者见智吧

        /// <summary>
        /// 修改
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnUpdate_Click(object sender, EventArgs e)
        {
            using (OrderDBContainer db = new OrderDBContainer())
            {
                //方案一:只有Modified = true的才修改
                /*
                UserAccout userAccount = new UserAccout();
                userAccount.FirstName = this.Txt_NewFirstName.Text;
                db.UserAccoutSet.Attach(userAccount);
                db.Entry(userAccount).Property(x => x.FirstName).IsModified = true;
                */

                //方案二:只有Modified = true的才修改
                /*
                UserAccout userAccount = new UserAccout();
                userAccount.FirstName = this.Txt_NewFirstName.Text;
                userAccount.LastName = this.Txt_NewLastName.Text;
                userAccount.Id = Convert.ToInt32(CBox_User.SelectedValue);
                userAccount.AuditFileds.UpdateDate = DateTime.Now;
                userAccount.AuditFileds.InsertDate = DateTime.Now;
                db.Entry(userAccount).State = System.Data.Entity.EntityState.Modified;
                db.Entry(userAccount).Property(item =>item.AuditFileds.InsertDate).IsModified = false;
                //存在的问题复杂类型中有2个标量类型,设置其中一个标量属性的IsModified为False时,整个复杂类型中的字段都没有存储
                */

                //方案三
                int userId = Convert.ToInt32(CBox_User.SelectedValue);
                var userSet = db.UserAccoutSet.Where(p => p.Id == userId).First();
                userSet.FirstName = this.Txt_NewFirstName.Text;
                userSet.LastName = this.Txt_NewLastName.Text;
                userSet.AuditFileds.UpdateDate = DateTime.Now;
                db.SaveChanges();
                MessageBox.Show("修改完成!");
            }
        }

【遗留问题】//存在的题目错综复杂类型受到起2独标量类型,设置中一个标量属性的IsModified为False时,整个复杂类型受到的字段都没存储

                如果来老师了解怎么解决,求指点,不胜感谢。

大红鹰葡京会 6

二、更新数据**

EF的翻新自己了解的措施发出如下三种植(可能还发另的方式)

【代码如下】

术同、只有FirstName的值会修改,很显眼要字段比较多,每个字段都遍历赋值是否修改,显示不是异常有益,故不建议下,如果是采用框架模板另外说吧。

道二、只有InsertDate
的价值不见面给改,其他的字段都见面被修改,如果字段比较多,表面上看起来较方便(只要设置不要涂改的排列就尽了),测试过程遭到为发觉弊端,如果实体中产生不行吗空字段,且不再排除不保留之排的限外,则会造成保存失败(如下图)。

大红鹰葡京会 7

术三,按自时的亮水平,感觉是不过负谱的,从数据库拿到数后使将要转移的值赋下就是足以了(从高并发、高性能方向为发出弊端,因为多了数据库的开发,需要事先使到数量映射到实体对象,在改动实体的属于性值,还要还保存至数据库,明显多了平糟数据库交互,而且若实体对象比较充分,对网的开发一定会增多).

仁者见仁智者见智吧

        /// <summary>
        /// 修改
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnUpdate_Click(object sender, EventArgs e)
        {
            using (OrderDBContainer db = new OrderDBContainer())
            {
                //方案一:只有Modified = true的才修改
                /*
                UserAccout userAccount = new UserAccout();
                userAccount.FirstName = this.Txt_NewFirstName.Text;
                db.UserAccoutSet.Attach(userAccount);
                db.Entry(userAccount).Property(x => x.FirstName).IsModified = true;
                */

                //方案二:只有Modified = true的才修改
                /*
                UserAccout userAccount = new UserAccout();
                userAccount.FirstName = this.Txt_NewFirstName.Text;
                userAccount.LastName = this.Txt_NewLastName.Text;
                userAccount.Id = Convert.ToInt32(CBox_User.SelectedValue);
                userAccount.AuditFileds.UpdateDate = DateTime.Now;
                userAccount.AuditFileds.InsertDate = DateTime.Now;
                db.Entry(userAccount).State = System.Data.Entity.EntityState.Modified;
                db.Entry(userAccount).Property(item =>item.AuditFileds.InsertDate).IsModified = false;
                //存在的问题复杂类型中有2个标量类型,设置其中一个标量属性的IsModified为False时,整个复杂类型中的字段都没有存储
                */

                //方案三
                int userId = Convert.ToInt32(CBox_User.SelectedValue);
                var userSet = db.UserAccoutSet.Where(p => p.Id == userId).First();
                userSet.FirstName = this.Txt_NewFirstName.Text;
                userSet.LastName = this.Txt_NewLastName.Text;
                userSet.AuditFileds.UpdateDate = DateTime.Now;
                db.SaveChanges();
                MessageBox.Show("修改完成!");
            }
        }

【遗留问题】//存在的题目错综复杂类型受到来2只标量类型,设置中一个标量属性之IsModified为False时,整个复杂类型受到之字段都不曾存储

                如果发教师了解怎么解决,求指点,不胜感谢。

大红鹰葡京会 8

三、查询数据

三、查询数据

 

        /// <summary>
        /// 查询数据绑定dataGirdView
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnQuery_Click(object sender, EventArgs e)
        {
            using (OrderDBContainer db = new OrderDBContainer())
            {
                List<UserAccout> list = db.UserAccoutSet.Where(x =>x.FirstName == "zhou").ToList();
                dataGridView1.DataSource = list;
            }     
        }

 

 

        /// <summary>
        /// 查询数据绑定dataGirdView
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnQuery_Click(object sender, EventArgs e)
        {
            using (OrderDBContainer db = new OrderDBContainer())
            {
                List<UserAccout> list = db.UserAccoutSet.Where(x =>x.FirstName == "zhou").ToList();
                dataGridView1.DataSource = list;
            }     
        }

 

季、删除数据

        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnDelete_Click(object sender, EventArgs e)
        {
            using (OrderDBContainer db = new OrderDBContainer())
            {
                //方式一、按员工的ID删除
                int userId = Convert.ToInt32(CBox_User.SelectedValue);
                UserAccout userSet = new UserAccout() { Id = userId };
                db.Entry(userSet).State = System.Data.Entity.EntityState.Deleted;
                db.SaveChanges();
                MessageBox.Show("删除完成!");
            }
        }

链接: https://pan.baidu.com/s/1i5cRdy9 密码: z63m

打赏大红鹰葡京会支付宝:

大红鹰葡京会 9

季、删除数据

        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnDelete_Click(object sender, EventArgs e)
        {
            using (OrderDBContainer db = new OrderDBContainer())
            {
                //方式一、按员工的ID删除
                int userId = Convert.ToInt32(CBox_User.SelectedValue);
                UserAccout userSet = new UserAccout() { Id = userId };
                db.Entry(userSet).State = System.Data.Entity.EntityState.Deleted;
                db.SaveChanges();
                MessageBox.Show("删除完成!");
            }
        }

链接: https://pan.baidu.com/s/1i5cRdy9 密码: z63m

打赏支付宝:

大红鹰葡京会 10

相关文章

admin

网站地图xml地图